数字格式未按预期工作:
Console.WriteLine(String.Format("{0:##,##,##,###.####}", 12345678))
'Outputs 12,345,678
'Expected output 1,23,54,678 based on the format provided
如何获得预期的输出?
您需要转义逗号。在格式化字符串中放置逗号后,格式化程序会在句点上使用逗号(每个 3 位数字)。如果您转义所有逗号,则不会触发该行为:
(123456789).ToString("##\\,##\\,##\\,###")
输出
"12,34,56,789"
如果这是针对特定文化(比如印度),您可以在字符串格式化程序中指定:
var culture = new CultureInfo("gu-IN")
Console.WriteLine(String.Format(culture, "{0:##,##,##,###.####}", 12345678))
这将为您提供输出:
1,23,45,678
这是古吉拉特语。但是其他印度文化(印地语的“hi-IN”,卡纳达语的“kn-IN”等)也有效。
这对我有用:
int input = 12345678;
Console.WriteLine(input.ToString(@"#\,##\,##\,###"));
预计自定义格式字符串仍受当前文化的数字格式规则的约束。你的有一个 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