Другой ответ при конвертации Double в Int - Java против .Net
Вопрос
Если в C # я хочу преобразовать double (1.71472) в int, я получаю ответ 2. Если я делаю это в Java с использованием метода intValue (), я получаю 1 в качестве ответа.
Java ограничивает конверсии?
Почему в документации по API Java есть такая скудная информация об их классах, т.е.
Возвращает значение указанного номер как инт. Это может включать округление или усечение.
Немного больше информации о округлении было бы полезно!
Решение
Java округляется до нуля при сужении от плавающей запятой до целочисленного типа & # 8212; и 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 использует Округление банкира в качестве алгоритма округления. Когда вы на полпути между раундами к четному целому числу.