Quel est le problème avec Math.Round () dans VB.Net?
J'ai une si étrange cas en Mathématiques.Fonction Round dans VB.Net
Math.Round((32.625), 2)
Résultat : 32.62
Math.Round((32.635), 2)
Résultat : 32.64
J'ai besoin de 32.63 mais la fonction est de travailler dans une logique différente dans ces cas.
Je peux obtenir de la partie décimale et de faire ce que je veux faire quelque chose sur elle. Mais n'est-ce pas trop bizarre, on est arrondi à la hausse, on est arrondi à la baisse.
Alors, comment puis-je obtenir 32.63 de 32.625 sans vous embêter avec partie décimale ? (comme la logique naturelle de Maths)
source d'informationauteur Mtok
Vous devez vous connecter pour publier un commentaire.
Math.Round
utilise l'arrondi par défaut. Vous pouvez changer cela en spécifiant un autreMidPointRounding
option. À partir de la MSDN:Arrondissement loin de zéro
D'arrondi au plus près, ou de l'arrondi
Donc, ce que vous voulez, c'est:
Comme d'autres l'ont mentionné, si la précision est importante, vous devriez être en utilisant
Decimal
variables plutôt qu'en virgule flottante types. Par exemple:Essayer ça (de mémoire):
Math.Round((32.635), 2, MidPointRounding.AwayFromZero)
De l'essayer.
Cela devrait faire ce que vous voulez.
Le sien un rapide fonction, vous pouvez l'ajouter pour vous simplifier la vie et faire en sorte que vous n'avez pas à taper tellement tout le temps.
Ajouter à votre application, puis utilisez la fonction
ou tout ce que vous avez besoin.
pour afficher le résultat - exemple
Cela permet d'afficher une messagebox avec 3,63
ce sera mis en textbox1.texte - 3.63 etc. etc.
Donc, si vous avez besoin d'arrondir plus d'un numéro, il ne sera pas si fastidieux et vous pouvez économiser beaucoup de la saisie.
Espère que cette aide.
Vous ne pouvez pas utiliser des flotteurs qui est ce que les nombres comme 32.625 est traitée comme dans VB.Net. (Il y a aussi le problème de l'arrondi comme mentionné par @StevenDoggart - vous allez probablement avoir à faire face à ces deux problèmes.)
Le problème est que le nombre stocké n'est pas exactement ce qui est entré parce que ces chiffres ne tiennent pas dans un fixe représentation binaire par exemple 32.625 est stockée en tant que 32.62499997 et 32.635 comme 32.63500001.
Le seul moyen pour être exact, est de stocker les nombres comme le type Decimal