1
我正在从文件读取美元价格。示例从文件中读取固定点的固定点并转换为长
asset_jsld 40.54
asset_sxd 40.80
我想有一个map
这些价格作为关键。由于float
或double
不是理想的键,我将我的价值转换为美分,我将它们存储为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
吗?有数字稳定的替代方案吗?
转换成'long'是对0,所以有你的情况正确的舍入,您可以用'长期价格=提振:: numeric_cast(price_d * 100.0 + 0.5)如果'price_d> = 0',则舍入到几乎最接近的值。 –
Franck