我正在编写一个程序,该程序从输入中获取美元金额,并以文字显示金额。目前无法使用字符串,数组或函数,因此尽管效率不是很高,但我已经使用开关结构对其进行了研究。

但是,当我将输入从浮点数转换为整数,并尝试使用模数来选择小数点后的数字时,就会出现问题。由于某种原因,它没有返回正确的数字。

所以说321.78
提取第一个小数(或8)会返回7。我不太确定为什么会这样,以及如何解决它。

这是我的第一部分代码

float number;
int digit1, digit2, digit3, decimals, decimal1, decimal2, int_number;

cout << "Enter a dollar amount from 0-1000: ";
cin >> number;

int_number = number * 100;

digit1 = (int_number % 1000)/100; //ones
digit2 = (int_number % 10000)/1000; //tens
digit3 = (int_number % 100000)/10000; // hundreds

decimal1 = int_number % 10;
decimal2 = (int_number % 100)/10;

如果输入为321.78,则十进制1应该返回8。我错过了什么吗?
任何帮助,将不胜感激。

最佳答案

就像将1.5转换为整数一样:结果类型的精度不足以精确地表示原始值。与321.78相同:浮点值不能精确地表示该值,并且最终得到的值比预期的要小一些,即321.77 ####,其中####表示多余的十进制数字在这里计算。当该值乘以100并转换为int时,它将被截断,从而成为32177。####变为32177。

编辑:忘记提及解决方案。

int dollars;
int cents;
char dp;
std::cin >> dollars;
std::cin >> dp;
std::cin >> cents;
cents += dollars * 100;

错误检查留给读者练习。

08-27 13:37