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

StackOverflow https://stackoverflow.com/questions/300055

  •  08-07-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top