我对此代码有疑问
int cent;
int dollar ;
float cnt2dlr;
//convert cnt to doloar ;
cnt2dlr=(cnt)/(100);
问题出在cnt = 175
,cnt2dlr = 0.17,444444
而不是0.17,5
任何帮助?
答案 0 :(得分:7)
浮点数通常不准确。你无能为力。
您的代码很好地说明了为什么您不应该使用浮点数进行涉及金钱的计算。仅仅因为货币值有一个小数点不赚钱一个浮点数量。浮点数应该用于无限小的变化,如温度或速度,而不是大块的数量,如金钱。
答案 1 :(得分:1)
浮点数不是精确的表示。它们是近似值,因此您无法保证精确度。阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic
要提高数字的精确度,请考虑使用64位double
而不是32位float
。
答案 2 :(得分:1)
我有点疑惑。如果你的意思是(分)而不是(cnt),那么
cnt2dlr=(cent)/(1000);
(注意e in cent)是一个int / int分区,175/1000应该返回int 0.
如果你这样做,你会得到相同的结果吗,例如
cnt2dlr=(cent)/(1000.0);
请注意小数点。