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


258

Je veux arrondir la valeur double à deux décimales en c # comment faire?

double inputValue = 48.485;

après l'arrondi

inputValue = 48.49;

Connexe: c # - Comment arrondir une valeur décimale à 2 décimales (pour la sortie sur une page)


Prenez note que vous ne pouvez pas représenter toutes les valeurs à virgule flottante en utilisant le double et cela peut vous trébucher lors de l'arrondi
Liam

Réponses:


479

Cela marche:

inputValue = Math.Round(inputValue, 2);

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)

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.


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

19

Utilisez Math.Round

value = Math.Round(48.485, 2);

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

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"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.