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

C#新手求助:数组存储收据数据,无法统计并显示小计

问题解决:C#收据程序小计金额计算错误

核心问题分析

  • 你定义了quantity和price数组但未实际使用,反而将价格、数量以字符串形式存在items数组中,且从未将单行小计累加到subtotal变量,导致最终显示的小计始终为0。
  • 使用Convert.ToDouble处理货币值存在精度风险,C#中处理金额应该用decimal类型。

修改后的代码

// 用字符串数组存储条目信息,维护decimal类型的小计变量保证精度
string[,] items = new string[100, 4];
decimal subtotal = 0;
int count = 0;

for (int i = 0; i < 100; i++)
{
    Console.Write("Enter Item Name(enter 0 to stop): ");
    items[i, 0] = Console.ReadLine();
    if (items[i, 0] == "0")
        break;

    // 读取价格并转换为decimal,增加输入验证
    Console.Write("Enter Item Price: ");
    if (!decimal.TryParse(Console.ReadLine(), out decimal itemPrice))
    {
        Console.WriteLine("请输入有效的数字价格!");
        i--; // 重新输入当前条目
        continue;
    }
    items[i, 1] = itemPrice.ToString("C"); // 可选:直接格式化为货币格式

    // 读取数量并转换为int,增加输入验证
    Console.Write("Enter Item Quantity: ");
    if (!int.TryParse(Console.ReadLine(), out int itemQuantity))
    {
        Console.WriteLine("请输入有效的整数数量!");
        i--; // 重新输入当前条目
        continue;
    }
    items[i, 2] = itemQuantity.ToString();

    // 计算单行小计并累加到总小计
    decimal lineSubtotal = itemPrice * itemQuantity;
    items[i, 3] = lineSubtotal.ToString("C");
    subtotal += lineSubtotal;

    count++;
}

Console.WriteLine("         Your Receipt");
for (int i = 0; i < count; i++)
{
    // 优化显示格式,避免每个元素单独换行(可选,按需调整)
    Console.WriteLine($"{items[i, 0],-15} {items[i, 2],5} x {items[i, 1],10} = {items[i, 3],10}");
}

Console.WriteLine("-------------------");
Console.WriteLine($"\n{count} Items total: ");
Console.WriteLine($"Subtotal:                     {subtotal:C}");
decimal tax = subtotal * 0.065M;
Console.WriteLine($"Tax (6.5%)                   {tax:C}");
decimal total = tax + subtotal;
Console.WriteLine($"Total:                        {total:C}");

关键修改点说明

  • 累加小计:计算每个条目的单行小计后,立即通过subtotal += lineSubtotal将其加入总小计,解决了小计为0的问题。
  • 类型安全:用decimal.TryParse替代Convert.ToDouble,既保证了货币计算的精度,又增加了输入验证,避免非法输入导致程序崩溃。
  • 冗余清理:移除了未使用的quantity和price多维数组,简化了代码结构。
  • 格式优化:用字符串插值和对齐语法调整了收据排版(你提到格式问题稍后处理,这里提供一个可选方案)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:45:09