我正在编写一个程序,它从用户那里获取美元输入并将其转换为int,即美分。 用户将始终输入最多2位小数的int或浮点数。我想通过乘以100将其转换为int。但是该程序对某些数字不起作用。
int cents = (dollars*100);
dollars
是用户提供的浮点输入。例如,如果我dollars
= 4.2,则cents
变为419.999。我该如何纠正这个问题?
答案 0 :(得分:4)
你无法纠正它。浮点数没有“小数位”。它们总是近似和模糊的。永远不要使用浮点数来赚钱 - 这是处理任何财务问题的最重要的软件规则之一。以字符串(%s
)读取输入,并通过在字符串中查找小数点然后在atoi
之前和之后的部分上使用.
将美分汇总在一起
答案 1 :(得分:2)
像这样简单调整值:
int cents = (int)(dollars*100 + 0.5);
答案 2 :(得分:0)
cents = (int)((dollars*100) + .5);
答案 3 :(得分:0)
1)您可以在项目属性中调整浮点精度模型 2)当从float转换为int时,添加一个位以允许向下舍入总是很方便的:
int cents = ((dollars*100.0)+0.5);