我正在申请中添加价格。我的值为QString
s,我转换为float和add。当它达到高值时,结果不准确。我读取像float或double不应该用于货币添加并使用单独的变量用于整数部分和小数部分。我的代码和日志如下:
qDebug ("m_totalPrice: %f + %f =", m_totalPrice, item.price.toFloat());
m_totalPrice += item.price.toFloat();
qDebug ("m_totalPrice: %f", m_totalPrice);
ui->totalLabel->setText(QString::number(m_totalPrice, 'f', 2));
m_totalPrice
为float
,item.price
为QString
日志:
- m_totalPrice:424659.500000 + 22350.500000 =
m_totalPrice:447010.000000
- m_totalPrice:447010.000000 + 18.900000 =
m_totalPrice:447028.906250
- m_totalPrice:447028.906250 + 125.900002 =
m_totalPrice:447154.812500
- m_totalPrice:447154.812500 + 125.900002 =
m_totalPrice:447280.718750
- m_totalPrice:447280.718750 + 11.500000 =
m_totalPrice:447292.218750
- m_totalPrice:447292.218750 + 22.500000 =
醇>
m_totalPrice:447314.718750
错误来自第2行。有人可以告诉你如何解决这个问题吗?
编辑:因为我的问题还没有完成
在第2行,它显示添加了447010.000000 + 18.900000 = 447028.906250
我怀疑是在添加之后它至少应该是447028.9000 ..
答案 0 :(得分:2)
这里有几个因素要考虑。
我在这里推荐的简单解决方案是使用双精度作为扩展精度整数,它可以找到最多15位数或几万亿美元,以美分表示。
但是,如果您对货币计算非常认真,则需要查找并使用固定十进制算术包。这笔投资是值得的。
我同意:永远不要使用浮动!