¿Redondear el doble en dos decimales en C #?


Respuestas:


479

Esto funciona:

inputValue = Math.Round(inputValue, 2);

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)

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.


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

19

Use Math.Round

value = Math.Round(48.485, 2);

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

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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.