redondear - Redondeando números negativos en Java
round double value java (6)
De acuerdo con Javadocs:
Devuelve el más cercano al argumento. El resultado se redondea a un entero agregando 1/2, tomando la palabra del resultado y lanzando el resultado para escribir long
. En otras palabras, el resultado es igual al valor de la expresión:
(long)Math.floor(a + 0.5d)
Según Wikipedia al redondear un número negativo, redondeas el número absoluto. Entonces, con ese razonamiento, -3.5 se redondearía a -4. Pero cuando uso java.lang.Math.round (-3.5) devuelve -3. ¿Puede alguien por favor explicar esto?
De acuerdo con el javadoc
Devuelve el más cercano al argumento. El resultado se redondea a un entero agregando 1/2, tomando la palabra del resultado y lanzando el resultado para escribir largo. En otras palabras, el resultado es igual al valor de la expresión:
(long)Math.floor(a + 0.5d)
Conceptualmente, redondeas. En otras palabras, al siguiente entero mayor que el valor y -3 es mayor que -3.5, mientras que -4 es menor.
El artículo de Wikipedia que cita no dice que esa sea la única forma de redondear, solo la forma común de redondear. También se mencionan en este artículo varias alternativas (desafortunadamente, ninguna de ellas describe el método de redondeo de Java, aunque lo mencionan como "Redondeo Aritmético Asimétrico" al indicar lo que hace JavaScript).
Debes decidir cómo quieres redondear tus números y luego usar ese método. Si la implementación de Java coincide con eso, entonces genial. de lo contrario, deberá implementarlo por su cuenta.
Hay una variedad de métodos de redondeo; el que está mirando se llama Redondeo Aritmético Simétrico (como lo indica). La sección a la que hace referencia indica: "Este método se usa comúnmente en aplicaciones matemáticas, por ejemplo, en contabilidad. Es el que generalmente se enseña en las clases de matemáticas básicas". Esto parece reconocer que no se trata de una norma globalmente acordada, sino la más común.
Personalmente, no recuerdo haber sido enseñado alguna vez esa regla en la escuela. Mi comprensión del redondeo siempre ha sido que .5 está redondeado, independientemente del signo del número. Aparentemente, los autores de Java tienen el mismo entendimiento. Esto es redondeo aritmético asimétrico.
Diferentes herramientas e idiomas potencialmente utilizan diferentes esquemas de redondeo. Excel aparentemente usa el método simétrico.
(En general, te aconsejaría que si encuentras un conflicto entre la Wikipedia y la experiencia, buscas información en otra parte. Wikipedia no es perfecta).
Por lo que vale, java.math.BigDecimal
tiene modos de redondeo seleccionables si necesita más control sobre ese tipo de cosas.
Resulta que la convención es para redondear. Creo que Wikipedia es falible. Resulta que Microsoft se equivocó, sin embargo, ya que lo redondean a -4 también, lo cual no es convencional (lo verifiqué con alguien que tiene un doctorado en matemáticas).