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

C#中使用Convert.ToDecimal实现BMI计算器出现精度异常求助

C# BMI计算器结果异常的问题分析与解决

你得到的异常结果是因为输入解析时的区域设置问题。如果你的系统区域(比如欧洲部分地区)使用逗号作为小数点分隔符,当你输入1.92时,Convert.ToDecimal会将点号识别为千位分隔符,把输入解析成192而非1.92。此时计算80/(192*192)就会得到你看到的0,00217...,而正确的计算应该是80/(1.92*1.92)=21.701...。

解决方法

  • 方法一:使用不变区域性解析输入(推荐,避免区域差异问题)
    在代码中指定用点号作为小数点解析输入,需要先引用System.Globalization命名空间,修改后的代码如下:

    using System;
    using System.Globalization;
    
    namespace BMI
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                decimal height = Convert.ToDecimal(Console.ReadLine(), CultureInfo.InvariantCulture); // 输入1.92
                decimal weight = Convert.ToDecimal(Console.ReadLine(), CultureInfo.InvariantCulture); // 输入80
                decimal BMI = weight / (height * height);
                Console.WriteLine(BMI); // 结果:21.70138888888888888888888889
                // 可格式化输出保留指定小数位数,比如4位:
                // Console.WriteLine("{0:F4}", BMI); // 输出:21.7014
            }
        }
    }
    
  • 方法二:匹配系统区域的输入格式
    如果你的系统区域使用逗号作为小数点,直接输入1,92而非1.92,Convert.ToDecimal就能正确解析为1.92,计算结果就会符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:45:07