Другой ответ при конвертации 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 в качестве алгоритма округления. Когда вы на полпути между раундами к четному целому числу.