【问题标题】:.Net - General numeric formatting does not seem to preserve zeros.Net - 一般数字格式似乎不保留零
【发布时间】:2019-12-02 17:11:14
【问题描述】:

查看the documentation on Standard Numeric Format Strings。它说

但是,如果数字是 Decimal 并且省略了精度说明符,则始终使用定点表示法并保留尾随零。

对我来说,尾随零的定义只是指数字末尾的任何零,无论它们是在小数点之前还是之后。

因此,根据我对尾随零的理解,300 和 3.00 都有两个尾随零。

但是,当我实际尝试时,似乎只保留了小数点前的尾随零。

我只是误解了此处尾随零的定义,还是会保留小数点后的零?

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine(new Decimal(10.000).ToString("G"));
        Console.WriteLine(new Decimal(0.000000).ToString("G"));
        Console.WriteLine(new Decimal(30000).ToString("G"));
    }
}

参见示例: https://dotnetfiddle.net/O2GwOY

【问题讨论】:

    标签: c# .net number-formatting


    【解决方案1】:

    问题是您没有将数字指定为 decimal 而是作为 double 文字。 由于double 不保留尾随零,因此构造函数看不到它们。对于前两个示例,您使用的是构造函数

    public Decimal (double value)
    

    最后一个

    public Decimal (int value)
    

    试试:

    Console.WriteLine(10.000m.ToString("G"));
    Console.WriteLine(0.000000m.ToString("G"));
    Console.WriteLine(30000m.ToString("G"));
    

    m 类型后缀(“m”表示货币)指定了一个 decimal 数字。这按预期工作。

    这也有效:

    Convert.ToDecimal("10.0000").ToString("G")
    

    Decimal.Parse("10.0000").ToString("G")
    

    见:Value types table (C# Reference)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 2010-11-16
      • 2022-12-21
      • 2021-06-20
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多