Arrondir le double à deux décimales en C #?

Réponses:

479

Cela marche:

inputValue = Math.Round(inputValue, 2);
Alex LE
la source
solution de contournement pour trunc float: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto
1
Si la valeur est 48,0000. Il n'en résultera pas 48,00. double inputValue = 48,00; inputValue = Math.Round (inputValue, 2); résultera en 48 seulement. Un warkaound?
user1926138
100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)
nandin
la source
4
C'est en fait ce qui devrait être utilisé. La plupart des opérations dans les banques, etc. sont effectuées à l'aide de cette méthode (MidpointRounding.AwayFromZero).
MadBoy
41
suggérant que les banques utilisent des doubles est un mec effrayant, n'utilisez pas de valeurs d'approximation pour la devise.
raggi
6
@raggi J'ai peur que certaines (banques) le fassent ... Cela expliquerait beaucoup de choses
SparK
4
Oui, je crois que c'est ce que le film "Office Space" a été réalisé après avoir arrondi des fractions de cents que personne ne remarquerait. Bon point pour faire attention quand utiliser arbitrairement l'arrondi.
atconway
1
Et dans le cadre de l'intrigue de l'un des films originaux de Superman il y a longtemps.
James Westgate
25

Tu devrais utiliser

inputvalue=Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)

Math.Round

Math.Round arrondit une valeur à virgule flottante double précision en un nombre spécifié de chiffres fractionnaires.

Arrondi

Spécifie comment les méthodes mathématiques d'arrondi doivent traiter un nombre situé à mi-chemin entre deux nombres.

Fondamentalement, la fonction ci-dessus prendra votre valeur d'entrée et l'arrondira à 2 décimales (ou au nombre que vous spécifiez). Avec MidpointRounding.AwayFromZeroquand un nombre est à mi-chemin entre deux autres, il est arrondi vers le nombre le plus proche qui est loin de zéro. Vous pouvez également utiliser une autre option qui arrondit vers le nombre pair le plus proche.

Jauge
la source
25

Un autre moyen simple consiste à utiliser ToString avec un paramètre. Exemple:

float d = 54.9700F;    
string s = d.ToString("N2");
Console.WriteLine(s);

Résultat:

54.97
Diwas
la source
19

Utilisez Math.Round

value = Math.Round(48.485, 2);
récursif
la source
Battez-moi (même si j'y ajouterais un point-virgule aussi;))
Reed Copsey
1
Cependant, soyez prudent avec MidpointRounding: "Si la valeur du premier chiffre dans la valeur à droite de la position décimale des chiffres est 5, le chiffre dans la position des chiffres est arrondi s'il est impair, ou reste inchangé s'il est pair"
Matthias
8

vous pouvez en essayer un par en dessous.

1. 
 value=Math.Round(123.4567, 2, MidpointRounding.AwayFromZero) //"123.46"
2.
 inputvalue=Math.Round(123.4567, 2)  //"123.46"
3. 
 String.Format("{0:0.00}", 123.4567);      // "123.46"
4. 
string.Format("{0:F2}", 123.456789);     //123.46
string.Format("{0:F3}", 123.456789);     //123.457
string.Format("{0:F4}", 123.456789);     //123.4568
reza.cse08
la source
J'ai utilisé la quatrième option. L'écriture de F6 a mieux fonctionné pour moi que l'écriture de 6 zéros ;-)
Maurice Klimek
2

Utilisez une chaîne interpolée, cela génère une chaîne arrondie:

var strlen = 6;
$"{48.485:F2}"

Production

"48.49"
bigpony
la source