VAT计算器计算异常:仅返回inf与-inf结果求助
VAT计算器输出inf/-inf的问题修复
核心问题分析
- 整数除法导致税率归零:
vatpercentage是int类型,执行vatpercentage / 100时属于整数除法,比如输入20的话,20/100结果为0,赋值回vatpercentage后变量直接变为0。后续计算vat = vatpercentage * vatpercentage得到0,price / vat就是除以0,直接触发inf(无穷大)结果。 - 变量类型误用:将浮点计算结果赋值给int类型变量,直接丢失小数部分,完全破坏税率计算逻辑。
- VAT公式逻辑错误:原代码的计算逻辑不符合实际VAT规则,正确的含税/不含税价格转换逻辑完全错误。
修正后的代码
#include <stdio.h> int main(void) { float price, vat_rate, vatless, vatprice; int vatpercentage; printf("Enter the price of the item: "); scanf_s("%f", &price); printf("What is the current VAT percentage: "); scanf_s("%d", &vatpercentage); // 用单独浮点变量存储税率的小数形式 vat_rate = (float)vatpercentage / 100.0f; // 含税价格转不含税价格 vatless = price / (1 + vat_rate); // 计算VAT金额 vatprice = price - vatless; printf("Total (incl. VAT) = %.2f\n", price); printf("VAT-less price = %.2f\n", vatless); printf("VAT amount = %.2f\n", vatprice); return 0; }
关键修正说明
- 新增
vat_rate浮点变量存储转换后的税率小数,避免覆盖原int类型的百分比值 - 使用
(float)vatpercentage / 100.0f确保执行浮点除法,保留税率的小数部分 - 修正VAT计算逻辑,符合实际的含税价格转不含税价格的规则
- 优化输出文本描述,让结果更清晰直观
内容的提问来源于stack exchange,提问作者dundern
相关产品推荐
相关产品推荐

