Другой ответ при конвертации Double в Int - Java против .Net - PullRequest
4 голосов
/ 18 ноября 2008

В C #, если я хочу преобразовать double (1.71472) в int, я получаю ответ 2. Если я делаю это в Java, используя метод intValue (), я получаю 1 в качестве ответа.

Java округляет количество конверсий?

Почему документы API Java имеют такую ​​скудную информацию об их классах, т. Е.

Возвращает значение указанного номер как инт. Это может включать округление или усечение.

Немного больше информации о округлении было бы полезно!

Ответы [ 3 ]

13 голосов
/ 18 ноября 2008

Java округляется до нуля при сужении от плавающей запятой до целочисленного типа - и C #, когда вы используете преобразование приведения. Convert.ToInt32 округляет:

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

Подробности можно найти в Спецификации языка Java . Обратите внимание, что хотя документация, цитируемая в Number, оставляет опции открытыми для подклассов, документация по конкретным типам бокса, таким как Double, , явно описывает реализацию:

Возвращает значение этого Double как int (приведение к типу int).

При использовании BigDecimal вы можете указать одну из восьми различных политик округления.

7 голосов
/ 18 ноября 2008

Java округляется до нуля при сужении от плавающей запятой до целочисленного типа.

Документация об общих правилах содержится в Спецификации языка Java . Обратите внимание, что хотя документация в Number оставляет опции открытыми для подклассов, документация по конкретным типам бокса является более явной:

Возвращает значение этого Double как int (приведение к типу int).

При использовании BigDecimal вы можете указать одну из восьми различных политик округления.

3 голосов
/ 19 ноября 2008

Джон Скит прав, но еще нужно обратить внимание на то, что .NET использует Банковское округление в качестве алгоритма округления. Когда вы на полпути между раундами к четному целому числу.

...