我正在从文件中读取美元价格。实施例
asset_jsld 40.54
asset_sxd 40.80
我希望map
将这些价格作为关键。由于float
或double
小于理想键,我将我的值转换为Dollar Cents,我将它们存储为long
。 words
是原始文件的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而long
是4079
。此舍入误差是否来自numeric_cast
?有数值稳定的替代方案吗?