Что случилось с этим делением?
Вот код:
class testsum { public static void main(String arg[]) { double sum=0; double fraction; fraction=-1/9; System.out.println("fraction: "+fraction); fraction=-1; fraction=fraction/9; System.out.println("fraction: "+fraction); } }
выходы равны 0
а затем -0.11111111
почему был первый выход 0
а не -0.11111111111
?
- Почему я не могу использовать значение float в качестве параметра шаблона?
- Сравнение поплавковых и двойных типов данных в объекте C
- Почему значение с плавающей запятой, такое как 3.14, по умолчанию считается в MSVC?
- Почему 24.0000 не равно 24.0000 в MATLAB?
- Почему моя целая математика с std :: pow дает неправильный ответ?
- Как обнаружить переполнение и переполнение двойной точки с двойной точностью?
- Почему это вычитание не равно нулю?
- Преобразовать десятичное число в двойное?
- Является ли наиболее значительная десятичная цифра точностью, которая может быть преобразована в двоичную и обратно в десятичную без потери значимости 6 или 7.225?
- Деление с плавающей запятой против умножения с плавающей запятой
- Сравнение с плавающей точкой
- Как анализировать float с двумя десятичными знаками в javascript?
- Как мне сделать сравнение с плавающей запятой?
Он выполняет целочисленное деление в первом примере, так как это тип по умолчанию для числового литерала. Попробуйте изменить его на -1.0/9
(или 1d/9d
– суффикс d указывает на double
), и вы должны получить тот же ответ.
1 и 9 являются целыми. Пытаться
1.0/9
Вот почему он работает для fraction/9
, так как fraction
является двойной.
Когда вы делаете -1/9, он говорит «-1», это int. 9, это int. -1 / 9 в целых делениях 0. О, теперь мне нужно сделать двойным ».
Изменение проблемы до -1.0 / 9 должно решить проблему.
Попробуйте обернуть «-1/9» в скобках.
Первый – 0, потому что он выполняет целочисленное деление. -1 и 9 и целые числа, а при делении равны 0. Результат затем преобразуется в двойной, чтобы он мог храниться во fraction
. Самое простое решение:
fraction = -1.0/9;
Поскольку -1
и 9
являются целыми числами, то -1/9
является целым делением (с результатом 0
, который при двойном равен 0.0
).
Чтобы сделать деление с плавающей запятой, вы должны преобразовать одно из чисел в двойное, (double) 9
, 9d
или просто 9.0
.
В последнем случае fraction
уже удваивается ( -1.0
), поэтому fraction/9
является делением с плавающей запятой.