Другой ответ при конвертации Double в Int - Java против.Net

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

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

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

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

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

3 ответа

Решение

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 Вы можете указать одну из восьми различных политик округления.

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

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

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

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

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

Другие вопросы по тегам