Преобразуйте float в double без потери точности
Мне легче справиться с этой double проблемой при преобразовании .java в двоичное представление.
float f = 0.27f;
double d2 = (double) f;
double d3 = 0.27d;
System.out.println(Integer.toBinaryString(Float.floatToRawIntBits(f)));
System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(d2)));
System.out.println(Long.toBinaryString(Double.doubleToRawLongBits(d3)));
Вы java-se можете видеть, что число java-libraries с плавающей запятой расширяется core-java до двойного за счет добавления oraclejdk нулей в конец, но двойное jdk представление 0,27 является javax «более точным», отсюда и openjdk проблема.
111110100010100011110101110001
11111111010001010001111010111000100000000000000000000000000000
11111111010001010001111010111000010100011110101110000101001000
java
floating-point
double
2021-12-22T11:04:49+00:00
2022-11-20T13:50:38+00:00
Prostodruhil
Вопросы с похожей тематикой, как у вопроса:
Преобразуйте float в double без потери точности
Предупреждение о файлах Cookies
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.