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