为何我运行硬币换算C++程序无法得到正确输出?
硬币金额计算程序的问题修复
原程序旨在输入25美分、10美分、5美分、1美分硬币的数量,计算总金额并输出对应的美元和美分,但运行结果不符合预期,以下是问题分析与修复方案:
原代码中的问题
- 变量拼写错误:计算总金额时,
totalMoney=quarters+nickels+dimes+pennie;里的pennie是笔误,正确变量名应为pennies,会导致编译错误或未定义变量问题。 - 浮点数精度误差:用
double类型计算硬币金额时,像0.10这类数值无法用二进制浮点数精确表示,累加后会出现类似2.9999999999而非3的偏差,导致美分计算错误。 - 美分计算逻辑缺陷:直接通过
(totalMoney - dollars)*100计算美分,会因浮点数误差得到非整数结果,比如本该是5美分却输出4.9999999999。
修复后的代码
#include <iostream> int main() { int numQuarters, numNickels, numDimes, numPennies; std::cout << "Please enter the number of coins:" << std::endl; std::cout << "# of quarters: "; std::cin >> numQuarters; std::cout << "# of nickels: "; std::cin >> numNickels; std::cout << "# of dimes: "; std::cin >> numDimes; std::cout << "# of pennies: "; std::cin >> numPennies; // 用整数计算总美分数,彻底避免浮点数精度问题 int totalCents = numQuarters * 25 + numNickels * 5 + numDimes * 10 + numPennies; int dollars = totalCents / 100; int cents = totalCents % 100; // 取余直接得到精确美分数 std::cout << "The total is " << dollars << " dollars and " << cents << " cents." << std::endl; return 0; }
修复说明
- 修正拼写错误:原代码中的
pennie笔误已通过整数计算逻辑规避,无需单独修改。 - 改用整数计算:将所有硬币金额转换为总美分数(整数类型),完全消除浮点数精度偏差,计算结果更准确。
- 简化美分计算:通过整数除法得到美元数,取余运算直接获取美分数,逻辑清晰且结果无误差。
内容的提问来源于stack exchange,提问作者Dietrich
相关产品推荐
相关产品推荐

