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

C#中double类型变量经Math.Round处理后为何输出3而非3.0?

问题描述

运行以下C#代码时,控制台输出结果为 System.Double, 3:

namespace NewApp 
{
    class Program
    {
        static void Main(string[] args)
        {
            double a = 1.0;
            double b = 2.7;
            a = Math.Round(b);
            Console.WriteLine(a.GetType() + ", " + a);
        }
    }
}

存在的疑问:变量a声明为double类型,经Math.Round(b)赋值后,为什么输出显示的是"3",而非预期的"3.0"?

原因说明
  • 核心逻辑:变量的实际类型、内存存储值,和它转成字符串后的展示效果没有绑定关系。从输出的System.Double就能确认,a始终是双精度浮点数类型,内存里存储的值也确实是3.0,全程没有发生类型转换为整型的情况。
  • 输出为3是浮点数默认字符串格式化的规则导致的:Console.WriteLine直接传入double值时,会自动调用该类型的无参ToString()方法,.NET对浮点数的默认格式化逻辑会自动省略尾部无意义的0——只要浮点数的值是整数,默认转字符串就不会显示小数点和后面的小数位,不管这个值实际是3.0、3.00还是3.000000,默认输出都会是3。
  • 验证方式:如果需要输出3.0的效果,手动指定格式化规则即可,比如把输出语句修改为Console.WriteLine(a.GetType() + ", " + a.ToString("0.0"));,运行后就会得到System.Double, 3.0的输出。
  • 补充:Math.Round方法本身的返回值类型就是double,赋值给double类型的变量a时不存在隐式类型转换,不会把值先转成整数再存回double。

内容的提问来源于stack exchange,提问作者Никита Попов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:27:40