我有一个函数可以将浮点数从 JNI 本机返回到 Java。这应该是一个简单的调用,但我得到了奇怪的结果。
在我的测试用例中,我将值 1.61863e+010 返回到 java 中。代码很简单:
cout << result << endl; cout.flush(); // get 1.61863e+010
return (jfloat) result;
(澄清一下,如果 cout.precision(6),我得到 16186300000.000000)
但是我的 Java 代码正在接收 1.61863004E10。当我使用
DecimalFormat formatter = new DecimalFormat("###,###.######");
System.out.println(formatter.format(result));
我得到 16,186,300,416。
这个 416 是从哪里来的?我认为 jfloat 和 float 都是 32 位 IEEE 浮点数,所以不应该有任何精度损失。
非常感谢。