可能重复:
表示中的浮点错误?
我对这段代码有疑问
int cent;
int dollar ;
float cnt2dlr;
//convert cnt to doloar ;
cnt2dlr=(cnt)/(100);
问题是什么时候cnt = 175
,cnt2dlr = 0.17,444444
而不是0.17,5
有什么帮助吗?
可能重复:
表示中的浮点错误?
我对这段代码有疑问
int cent;
int dollar ;
float cnt2dlr;
//convert cnt to doloar ;
cnt2dlr=(cnt)/(100);
问题是什么时候cnt = 175
,cnt2dlr = 0.17,444444
而不是0.17,5
有什么帮助吗?
浮点数通常是不精确的。您对此无能为力。
您的代码很好地说明了为什么不应该使用浮点数进行涉及金钱的计算。仅仅因为货币值有小数点并不能使货币成为浮点数。浮点数应该用于变化无穷小的数量,比如温度或速度,而不是用于块状变化的数量,比如钱。
浮点数不是精确的表示。它们是近似值,因此您无法保证很高的精度。阅读每位计算机科学家应了解的浮点运算知识
要提高数字的精度,请考虑使用 64 位double
而不是 32 位float
。
我有点疑惑。如果您的意思是 (cent) 而不是 (cnt),那么
cnt2dlr=(cent)/(1000);
(注意 e in cent)是一个 int / int 除法,175 / 1000 应该返回 int 0。
如果你这样做,你会得到相同的结果吗,例如
cnt2dlr=(cent)/(1000.0);
注意小数点。