La limitation de la double à la 3e décimale
Ce que je ce que je suis en train de réaliser:
Si un double est de plus de 3 décimales, je veux tronquer tout décimales au-delà de la troisième. (ne pas rond.)
Eg.: 12.878999 -> 12.878
Si un double a moins de 3 décimales, laisser inchangée
Eg.: 125 -> 125
89.24 -> 89.24
Je suis tombé sur cette commande:
double example = 12.34567;
double output = Math.Round(example, 3);
Mais je ne veux pas rond. En fonction de la commande affiché ci-dessus,
12.34567 -> 12.346
Je veux tronquer la valeur, de sorte qu'il devient: 12.345
Vous devez vous connecter pour publier un commentaire.
Doubles n'ont pas de décimales - ils ne sont pas basés sur des chiffres décimaux pour commencer. Vous pourriez obtenir "le plus proche du double de la valeur actuelle lorsque tronqué à trois chiffres après la virgule", mais ce ne serait pas encore exactement la même chose. Vous feriez mieux d'utiliser
decimal
.Cela dit, si c'est seulement la façon de l'arrondissement se qui est un problème, vous pouvez utiliser
Math.Truncate(value * 1000) /1000;
qui peut faire ce que vous voulez. (Vous ne voulez pas arrondissement à tous, par les sons de celui-ci.) C'est toujours potentiellement "douteux" si, comme le résultat toujours de ne pas vraiment avoir juste trois décimales. Si vous avez fait la même chose avec une valeur décimale, cependant, il serait travail:EDIT: Comme LBushkin souligné, vous devez être clair entre tronquer pour affichage fins (ce qui peut être fait dans un spécificateur de format) et la troncature pour d'autres calculs (dans ce cas, le ci-dessus devrait fonctionner).
decimal
.Je ne peux pas penser à une raison pour explicitement une perte de précision à l'extérieur de l'affichage. Dans ce cas, il suffit d'utiliser la chaîne de formatage.
Multiplier par 1000 puis utiliser Tronquer, puis diviser par 1000.
Si votre but est de tronquer les chiffres pour l'affichage des raisons, alors que vous venez juste d'utiliser une mise en forme lorsque vous convertir le double pour une chaîne de caractères.
Méthodes comme
String.Format()
etConsole.WriteLine()
(et les autres) vous permettent de limiter le nombre de chiffres de précision une valeur est formaté avec.De tenter de "tronquer" des nombres à virgule flottante est mal avisée - nombres en virgule flottante n'ont pas un précis de la représentation décimale dans de nombreux cas. L'application d'une approche comme la mise à l'échelle jusqu', tronquant, puis mise à l'échelle vers le bas pourrait facilement changer la valeur à quelque chose de tout à fait différent de ce que vous avez prévu pour les "tronquée" de la valeur.
Si vous avez besoin précis représentations décimale d'un nombre, vous devriez être en utilisant
decimal
plutôt quedouble
oufloat
.Vous pouvez utiliser:
Bonnes réponses ci-dessus - si vous êtes à la recherche de quelque chose de réutilisable voici le code. Notez que vous pourriez vouloir vérifier le nombre de décimales de la valeur, et cela peut déborder.
En C lang: