Преобразуйте 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

2022-11-20T13:50:38+00:00