gpt4 book ai didi

java - float 从 jni 返回到 java 收到错误结果

转载 作者:行者123 更新时间:2023-12-02 06:16:26 26 4
gpt4 key购买 nike

我有一个函数,可以将 float 从 native 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 浮点,所以不应该有任何精度损失。

非常感谢。

最佳答案

您使用的是 float,它的精度只有 7 位十进制数字(尾数为 23 位,带有标准化数字的隐式位)。因此,您应该将其之后的任何内容视为有效的噪音。您的值实际上并没有改变 - 只是 Java 和 C++ 实现之间显示的表示有所不同。

关于java - float 从 jni 返回到 java 收到错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com