Pregunta

En C # si quiero convertir un doble (1.71472) en un int, obtengo la respuesta 2. Si hago esto en Java usando el método intValue (), obtengo 1 como respuesta.

¿Java reduce las conversiones?

¿Por qué los documentos API de Java tienen información tan escasa sobre sus clases, es decir?

  

Devuelve el valor del especificado   número como int. Esto puede involucrar   redondeo o truncamiento.

¡Un poco más de información sobre el redondeo hubiera sido útil!

¿Fue útil?

Solución

Java se redondea hacia cero cuando se estrecha desde un punto flotante a un tipo entero, y también lo hace C #, cuando utiliza la conversión de conversión. Es Convert.ToInt32 que redondea:

double d = 1.71472;
int x = (int) d; // x = 1
int y = Convert.ToInt32(d); // y = 2

Los detalles se pueden encontrar en la Especificación del lenguaje Java . Tenga en cuenta que, si bien la documentación citada en Number deja las opciones abiertas para las subclases, la documentación sobre los tipos de boxeo concreto, como Double , es explícito acerca de la implementación:

  

Devuelve el valor de este Doble como un   int (enviando para escribir int).

Cuando se usa BigDecimal , puede especificar una de las ocho políticas de redondeo diferentes.

Otros consejos

Java se redondea hacia cero cuando se estrecha desde un punto flotante a un tipo entero.

Hay más documentación sobre las reglas generales en el Lenguaje Java Especificación . Tenga en cuenta que si bien la documentación en Number deja las opciones abiertas para las subclases, la documentación sobre los tipos de boxeo concreto es más explícita:

  

Devuelve el valor de este Doble como un   int (enviando para escribir int).

Cuando se usa BigDecimal , puede especificar una de las ocho políticas de redondeo diferentes.

Jon Skeet es correcto, pero algo más a tener en cuenta es que .NET usa Redondeo bancario como su algoritmo de redondeo. Cuando estás a medio camino entre la ronda y el entero par.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top