2

数字格式未按预期工作:

Console.WriteLine(String.Format("{0:##,##,##,###.####}", 12345678))

'Outputs 12,345,678
'Expected output 1,23,54,678 based on the format provided

如何获得预期的输出?

4

4 回答 4

2

您需要转义逗号。在格式化字符串中放置逗号后,格式化程序会在句点上使用逗号(每个 3 位数字)。如果您转义所有逗号,则不会触发该行为:

(123456789).ToString("##\\,##\\,##\\,###")

输出

"12,34,56,789"
于 2013-05-18T17:04:16.417 回答
2

如果这是针对特定文化(比如印度),您可以在字符串格式化程序中指定:

var culture = new CultureInfo("gu-IN")
Console.WriteLine(String.Format(culture, "{0:##,##,##,###.####}", 12345678))

这将为您提供输出:

1,23,45,678

这是古吉拉特语。但是其他印度文化(印地语的“hi-IN”,卡纳达语的“kn-IN”等)也有效。

于 2013-05-18T17:09:18.063 回答
2

这对我有用:

int input = 12345678;
Console.WriteLine(input.ToString(@"#\,##\,##\,###"));
于 2013-05-18T17:11:01.883 回答
1

预计自定义格式字符串仍受当前文化的数字格式规则的约束。你的有一个 NumberFormatInfo.NumberGroupSizes 属性,将数字按 3 分组,非常常见。覆盖用户的文化偏好通常是一个非常糟糕的主意,请三思而后行。但是您可以创建自己的,使用 NumberFormatInfo.Clone() 方法并修改属性:

using System;
using System.Globalization;

class Program {
    static void Main(string[] args) {
        var info = (NumberFormatInfo)System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.Clone();
        var groups = new int[] { 3, 2, 2 };
        info.NumberGroupSizes = groups;
        Console.WriteLine(String.Format(info, "{0:##,##,##,###.####}", 12345678));
        Console.ReadLine();
    }
}

输出:1,23,45,678

于 2013-05-18T17:10:59.847 回答