使用最少十进制位数格式化双精度类型

Posted

技术标签:

【中文标题】使用最少十进制位数格式化双精度类型【英文标题】:Format double type with minimum number of decimal digits 【发布时间】:2011-09-15 15:37:00 【问题描述】:

我需要格式化双精度类型,使其至少有两位小数,但不限制最大小数位数:

5     -> "5.00"
5.5   -> "5.50"
5.55  -> "5.55"
5.555 -> "5.555"
5.5555 -> "5.5555"

我怎样才能实现它?

【问题讨论】:

所以你想双重转换为字符串并确保它至少有 2 个十进制数字? 【参考方案1】:

您可以将0 格式指定器用于非可选数字,将# 用于可选数字:

n.ToString("0.00###")

此示例最多为您提供五个十进制数字,您可以根据需要添加更多 # 位置。

【讨论】:

请注意,输出将是特定于文化的。例如,在某些国家/地区,小数分隔符将是“,”而不是“.”。如果你坚持一个'。使用:n.ToString("0.00###", CultureInfo.InvariantCulture);【参考方案2】:

试试这个

    static void Main(string[] args)
    
        Console.WriteLine(FormatDecimal(1.678M));
        Console.WriteLine(FormatDecimal(1.6M));
        Console.ReadLine();

    

    private static string FormatDecimal(decimal input)
    
        return Math.Abs(input - decimal.Parse(string.Format("0:0.00", input))) > 0 ?
            input.ToString() :
            string.Format("0:0.00", input);
    

【讨论】:

【参考方案3】:

ToString("0.00#") 之类的东西应该可以工作

在这种情况下,它最多保留 3 个小数位,因此请根据需要添加哈希。

【讨论】:

以上是关于使用最少十进制位数格式化双精度类型的主要内容,如果未能解决你的问题,请参考以下文章

C 语言中双精度浮点型精度怎样保留位数

如何在 .NET 中将双精度值转换为具有固定小数位数的小数类型值

格式化双精度到 6 位小数精度

实验2

c语言如何控制小数位数?

如何在没有不必要的十进制 0 的情况下很好地将浮点数格式化为字符串