1

我正在尝试修改一些库,我需要在 ptree 中存储一个浮点值。但是,当我检索该值时,它与我输入的值不同。双打不会发生这种情况。例子:

Ptree pt;

float f = 230518.391;
pt.put("float", f);
pt.put("double", (double) f)

cout << "f: " << f;
cout << "pt.float: " << pt.get<float>("float");
cout << "pt.double: " << pt.get<double>("double");

输出:f:230518.391 pt.float:230518.406 pt.double:230518.391

这里到底发生了什么?

4

2 回答 2

2

可能是舍入“错误”和编译器优化的组合。当浮点数存储到属性树中时会发生舍入。

但是,当您存储 double 时,不会发生舍入。现在在这一行pt.put("double", (double) f),编译器可能会优化“f”,并将文字放在那里。所以编译器不使用四舍五入的值。与第一个 cout 类似cout << "f: " << f;这里也优化了浮点数,并将文字放在了它的位置。

编辑:刚刚测试过,难道“四舍五入”的值实际上是“ 230518.9 06

这个网站可能有助于转换这些数字:)。

于 2012-01-26T15:57:20.397 回答
1

您需要将其视为float限制在7数字附近的精度。因此,您所看到的可能是您的文字最接近的可存储浮点值。在这种情况下,其他输出可能会受到编译器优化的影响,以获得正确的值(编译器可以省略转换f为 double 并简单地将文字放在适当的位置。

于 2012-01-26T16:00:47.163 回答