Java 语言规范第 3.10.2 点声明浮点值按照 IEEE 754 标准中的规定进行转换。对于strtod
,C 标准指定函数如何将文本转换为浮点值。关于表示本身,两者似乎涵盖了相同的情况。我不确定的是,四舍五入规则如何?Java 编译器的转换是否与实际转换不同strtod
?
背景是我想编译为 Java 字节码代码,因此需要将浮点/双精度值的文本表示转换为类文件中的表示。
例如,这个 Java 代码打印一个更精确的值:
double value = 1.23412991913372577889911;
System.out.println(value);
// Output: 1.2341299191337258
使用 strtod 转换相同的值并将其打印出来会打印出不太精确的值:
const char* textual = "1.23412991913372577889911";
double result = strtod(textual, ...);
std::cout << result << std::endl;
// Output: 1.23413
这是输出问题,还是实际以不同方式转换的值?
编辑:正如 Pascal Cuoq 评论的那样,当以全精度打印出值时(我通过 settings 这样做std::cout.precision()
),值是相等的,所以我假设转换导致相同的值。我想我会为此做一个测试。:-)