寻找解决我的问题的解决方案,我发现只有Hex符号转换为int值,但不是相反的情况。
我试过这个:
float grades = -32.33f ;
System.out.println("grades: "+grades);
double radians = Math.toRadians(grades);
System.out.println("rad: "+radians);
radians = radians * 100000000;
System.out.println("rad * 10^8: "+radians);
String hex = Double.toHexString(radians);
System.out.println("signed to hex: "+hex);
带输出:
grados: -32.33
rad: -0.5642649791276998
rad * 10^8: -5.642649791276998E7
signed to hex: -0x1.ae8000f4d5a59p25
但我期待得到:
FCA30001
在这个回答Java negative int to hex and back fails中,我发现Double.toHexString(radians);
给了我一个未定值的值,可能这就是问题所在。任何想法?
提前致谢。
编辑:
我正在尝试执行以下的逆操作:
答案 0 :(得分:0)
检查long / int溢出:10 8 需要23位+2π3位< 32,所以int很好。
long radiansUp8 = 0xFFFF_FFFFL & (long)(radians * 100_000_000);
String hex = Long.toHexString(radiansUp8);
虽然我们拿了一个int,因为符号,它被放在一个long中,并用Integer.MAX_VALUE掩盖。
精确度:
如您所知double
只是2的幂和的近似值。乘以10 8 会放大近似误差。在您的代码中,甚至使用了4个字节float
。
double grades = -32.33;
应该会好一点。