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

Jes*_*Ram 0 c floating-point

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

我试过scan("%f", &num),但我在浮动结束时得到随机值.

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

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

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

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

R..*_*R.. 6

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

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