如何在C中读取和存储货币值

时间:2015-11-29 04:41:31

标签: c floating-point

我想知道在C中读取和存储货币值的最佳方法是什么 例如11.22。

我尝试了scan("%f", &num),但我在浮动结束时获得了随机值。

有没有办法只读到小数点后第二位?

如果我添加这些数字,它们就不准确;由于某种原因它倒圆了。添加11.22 + 22.33优于11.220000 + 22.330000,因为我得到了随机值;我不知道为什么!

如果超出小数点后第二位并且用户输入了一个字符,是否有办法向用户返回错误。

我在考虑将(数组)字符串转换为浮点数。

1 个答案:

答案 0 :(得分:6)

切勿使用浮点存储货币。浮点数不能代表十分之一或百分数,只有二元有理数,即p / q形式的数字,其中p和q是整数,q是2的幂。因此,任何试图代表其他的超过0,25,50或75美分将需要近似值,这些近似值转化为可被利用以使您赔钱的漏洞。

相反,以美分(或任何最小的货币分配)存储整数值。当读取用小数点格式化的值时,只需将整个货币单位和美分读取为单独的字段,然后乘以100(或适当的10的幂)并添加。