Quiero hacer esto usando la Math.Round
función
c#
decimal
rounding
bankers-rounding
Rex M
fuente
fuente
0.005
el número antes de redondear. Del mismo modo para redondear hacia abajo , restar0.005
antes de pasar a laMath.Round
función.MidPointRounding.ToEven
(también conocido como "Redondeo de banqueros") es porque todos aprendimos a redondear en la escuela donde .5 redondea causa demasiado redondeo. Este es un problema cuando se trata de dinero, cálculos de impuestos, etc.Prueba esto:
fuente
Personalmente nunca redondeo nada. Manténgalo lo más resuelto posible, ya que el redondeo es un arenque rojo en CS de todos modos. Pero sí desea formatear los datos para sus usuarios, y para ese fin, creo que
string.Format("{0:0.00}", number)
es un buen enfoque.fuente
Si quieres una cuerda
O un decimal
¡Pero recuerda! El redondeo no es distributivo, es decir.
round(x*y) != round(x) * round(y)
. Por lo tanto, no redondee hasta el final de un cálculo, de lo contrario perderá precisión.fuente
Wikipedia tiene una buena página sobre redondeo en general.
Todos los lenguajes .NET (administrados) pueden usar cualquiera de los mecanismos de redondeo del tiempo de ejecución de lenguaje común (CLR). Por ejemplo, el método Math.Round () (como se mencionó anteriormente) permite al desarrollador especificar el tipo de redondeo (Round-to-even o Away-from-zero). El método Convert.ToInt32 () y sus variaciones usan redondeo a par . Los métodos Ceiling () y Floor () están relacionados.
También puede redondear con formato numérico personalizado .
Tenga en cuenta que Decimal.Round () usa un método diferente que Math.Round ();
Aquí hay una posición útil sobre el algoritmo de redondeo del banco. Vea una de las publicaciones humorísticas de Raymond aquí sobre redondeo ...
fuente
// convierte hasta dos decimales
=========
También puede combinar "0" con "#".
fuente
Sé que es una pregunta antigua, pero tenga en cuenta las siguientes diferencias entre la ronda matemática y la ronda de formato de cadena :
fuente
Esto es para redondear a 2 decimales en C #:
En VB.NET:
fuente
Si desea redondear un número, puede obtener diferentes resultados dependiendo de: cómo use la función Math.Round () (si es un redondeo hacia arriba o hacia abajo), está trabajando con números de dobles y / o flotantes , y aplica el redondeo del punto medio. Especialmente, cuando se usa con operaciones dentro de él o la variable a redondear proviene de una operación. Digamos que desea multiplicar estos dos números: 0.75 * 0.95 = 0.7125 . ¿Derecha? No en C #
Veamos qué sucede si quieres redondear al tercer decimal:
Como puede ver, la primera ronda () es correcta si desea redondear hacia abajo el punto medio. Pero la segunda ronda () está mal si quieres redondear.
Esto se aplica a los números negativos:
Entonces, en mi humilde opinión, debe crear su propia función de ajuste para Math.Round () que se ajuste a sus requisitos. Creé una función en la cual, el parámetro 'roundUp = true' significa redondear al siguiente número mayor. Es decir: 0.7125 se redondea a 0.713 y -0.7125 se redondea a -0.712 (porque -0.712> -0.713). Esta es la función que creé y funciona para cualquier número de decimales:
La variable 'corrector' es para corregir la inexactitud de operar con números flotantes o dobles.
fuente
Una cosa que es posible que desee verificar es el Mecanismo de redondeo de las matemáticas.
http://msdn.microsoft.com/en-us/library/system.midpointrounding.aspx
Aparte de eso, recomiendo el enfoque Math.Round (inputNumer, numberOfPlaces) sobre el * 100/100 porque es más limpio.
fuente
Debería poder especificar el número de dígitos que desea redondear usando Math.Round (YourNumber, 2)
Puedes leer más aquí .
fuente
Math.Floor (123456.646 * 100) / 100 Devuelve 123456.64
fuente
cadena a = "10.65678";
decimal d = Math.Round (Convert.ToDouble (a.ToString ()), 2)
fuente
Tuve una situación extraña en la que tenía una variable decimal, al serializar 55.50 siempre establece el valor predeterminado matemáticamente como 55.5. Pero mientras, nuestro sistema de cliente espera seriamente 55.50 por alguna razón y definitivamente esperaban decimal. Eso fue cuando escribí el siguiente ayudante, que siempre convierte cualquier valor decimal rellenado a 2 dígitos con ceros en lugar de enviar una cadena.
El uso debe ser
Salida:
fuente
fuente