¿Redondear el doble en dos decimales en C #?

Respuestas:

479

Esto funciona:

inputValue = Math.Round(inputValue, 2);
Alex LE
fuente
solución alternativa para trunc float: float myTruncFloat = float.Parse (Math.Round (myFloat, 2) .ToString ());
Piero Alberto
1
Si el valor es 48.0000. No resultará 48.00. doble inputValue = 48.00; inputValue = Math.Round (inputValue, 2); resultará solo 48. Cualquier warkaound?
user1926138
100
Math.Round(inputValue, 2, MidpointRounding.AwayFromZero)
nandin
fuente
44
Esto es en realidad lo que debe usarse. La mayoría de las operaciones en bancos, etc., se realizan utilizando este método (MidpointRounding.AwayFromZero).
MadBoy
41
sugiriendo que los bancos usen dobles es aterrador, no utilices valores de aproximación para la moneda.
raggi
66
@raggi Me temo que algunos (bancos) hacen ... Eso explicaría muchas cosas
SparK
44
Sí, creo que esto fue lo que hizo la película 'Office Space' después de redondear fracciones de centavos que nadie notaría. Buen punto para tener cuidado sobre cuándo utilizar arbitrariamente el redondeo.
atconway
1
Y como parte de la trama de una de las películas originales de Superman hace mucho tiempo.
James Westgate
25

Deberías usar

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

Math.Round

Math.Round redondea un valor de coma flotante de doble precisión a un número específico de dígitos fraccionarios.

Punto medio Redondeado

Especifica cómo los métodos de redondeo matemático deben procesar un número que está a medio camino entre dos números.

Básicamente, la función anterior tomará su valor de entrada y lo redondeará a 2 (o el número que especifique) lugares decimales. Con MidpointRounding.AwayFromZerocuando un número está a medio camino entre los otros dos, se redondea hacia el número más cercano que está lejos de cero. También hay otra opción que puede usar que redondea hacia el número par más cercano.

Calibrar
fuente
25

Otra forma fácil es usar ToString con un parámetro. Ejemplo:

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

Resultado:

54.97
Diwas
fuente
19

Use Math.Round

value = Math.Round(48.485, 2);
recursivo
fuente
Golpéame (aunque también agregaría un punto y coma allí);)
Reed Copsey
1
Sin embargo, tenga cuidado con MidpointRounding: "Si el valor del primer dígito en valor a la derecha de la posición decimal de dígitos es 5, el dígito en la posición de dígitos se redondea hacia arriba si es impar, o se deja sin cambios si es par"
Matthias
8

puedes probar uno desde abajo. Hay muchas maneras de hacerlo.

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
fuente
Usé la cuarta opción. Escribir F6 funcionó para mí mejor que escribir 6 ceros ;-)
Maurice Klimek
2

Use una cadena interpolada, esto genera una cadena redondeada:

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

Salida

"48.49"
bigpony
fuente