C#使用Math.Round保留2位小数无法输出73.50类格式问题求解
问题原因
- 你的
Math.Round逻辑已经正确完成了数值的两位小数精度舍入,double属于数值存储类型,本身不会保留无意义的末尾后缀0 - 输出异常的核心原因是:控制台默认将
double转为字符串输出时,会自动省略末尾的0,和舍入逻辑无关
解决方案
你只需要在输出时指定字符串格式化规则即可,不需要修改舍入逻辑,有两种常用写法:
- 占位符格式化写法
double b1 = double.Parse(Console.ReadLine()); double b2 = double.Parse(Console.ReadLine()); double h = double.Parse(Console.ReadLine()); double area = (b1 + b2) * h / 2; double area1 = Math.Round(area, 2, MidpointRounding.ToEven); // 修改输出行,F2表示固定保留2位小数,自动补末尾的0 Console.WriteLine("{0:F2}", area1);
- 插值字符串写法(C# 6及以上版本支持,更简洁)
Console.WriteLine($"{area1:F2}");
补充说明
如果你不需要单独存储舍入后的area1变量做后续计算,也可以省略Math.Round步骤,直接对原始计算结果做格式化输出:Console.WriteLine($"{area:F2}");,格式化操作会默认按照MidpointRounding.ToEven规则完成舍入,和你原有逻辑效果一致。
内容的提问来源于stack exchange,提问作者Valentin Kardzhaliev
相关产品推荐
相关产品推荐

