You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

餐厅账单平分计算程序输出不符预期问题排查

餐厅账单个人应付金额计算程序错误修复

当输入账单金额50美元、10%税率、20%小费比例时,程序实际输出32.50美元,但预期输出应为33.00美元。以下是问题分析与修复方案:

错误点分析

  • 小费计算基数错误:小费应基于含税后的账单总金额计算,而非原始账单金额。当前代码中小费直接用原始账单金额计算,导致小费金额少算,最终总账单偏低。
  • 整数除法导致精度丢失:tip是整数类型,tip/100会执行整数除法(例如20/100结果为0而非0.2),无法得到正确的小费比例。

修正后的代码

// Calculate your half of a restaurant bill
// Data types, operations, type casting, return value

#include <cs50.h>
#include <stdio.h>
#include <math.h>

float half(float bill, float tax, int tip);

int main(void)
{
    float bill_amount = get_float("Bill before tax and tip: ");
    float tax_percent = get_float("Sale Tax Percent: ");
    int tip_percent = get_int("Tip percent: ");

    printf("You will owe $%.2f each!\n", half(bill_amount, tax_percent, tip_percent));
}

// 修正后的账单计算函数
float half(float bill, float tax, int tip)
{
    // 计算含税账单金额
    float tax_amount = bill * (tax / 100);
    float after_tax_bill = bill + tax_amount;
    
    // 基于含税金额计算小费,转换tip为浮点数避免整数除法
    float tip_amount = after_tax_bill * ((float)tip / 100);
    
    // 计算总账单并平分
    float total_bill = after_tax_bill + tip_amount;
    return total_bill / 2;
}

修正逻辑说明

  1. 先计算含税后的账单金额:after_tax_bill = bill + tax_amount;
  2. 以含税金额为基数计算小费,通过(float)tip将整数转换为浮点数,确保tip/100得到正确的浮点比例;
  3. 总账单为含税金额加小费,最后平分得到个人应付金额。

测试输入50美元账单、10%税率、20%小费比例时:

  • 含税金额:50 + 50×0.1 = 55美元;
  • 小费:55×0.2 = 11美元;
  • 总账单:55 + 11 = 66美元;
  • 个人应付:66÷2 = 33.00美元,与预期结果一致。

内容的提问来源于stack exchange,提问作者user21087049

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:40:14