从文件中读取固定点的固定双精度并转换为长整数

时间:2016-10-02 20:41:37

标签: c++ c++11 boost rounding numeric

我正在从文件中读取美元价格。实施例

asset_jsld 40.54
asset_sxd 40.80

我希望map将这些价格作为关键。由于floatdouble小于理想键,我将我的值转换为Dollar Cents,我将它们存储为longwords是原始文件的string列的列表。

using boost::spirit::qi::parse;
// ...
if (!parse(words[1].begin(), words[4].end(), double_, price_d))
  // Error handeling
long price = boost::numeric_cast<long>(price_d * 100.0);

问题是double是40.80而long4079。此舍入误差是否来自numeric_cast?有数值稳定的替代方案吗?

1 个答案:

答案 0 :(得分:2)

如果您想要一致性,请不要对浮点数进行数学运算。将值读取为字符串,删除点并将其解析为long

Is floating point math broken?