全球化自定义数字格式 - 可变小数点

Posted

技术标签:

【中文标题】全球化自定义数字格式 - 可变小数点【英文标题】:Globalized custom number formatting - Variable decimal points 【发布时间】:2011-05-05 18:26:50 【问题描述】:

我正在尝试更改我公司应用程序中现有的数字格式,以使其对国际用户更具可读性。这是一个股票交易应用程序,所以大多数股票价格的数字都精确到小数点后 2 位,比如 so-> 17.23 我们还可以得到精确到小数点后 4 位的刻度,所以一便士股票可能是 0.0341。我们用于股票的原始字符串格式是“#,##0.00##”,这将为我们提供我们想要的格式(基本上是修剪 '0')。这里的问题是“,”和“。”强制用户使用,在许多其他国家/地区,千位分隔符是“。”小数点是','。老板不想对所有数字都使用“N4”,即使这样可以解决全球化问题。是否可以有一个全球化的自定义字符串格式?

除了编写一些中间人代码来国际化以原始方式或其他 string.format 方法格式化的数字之外,还有其他选择吗?

【问题讨论】:

【参考方案1】:

看看这个:

float value = 0.0341f;
string output = string.Empty;
CultureInfo brazil = new CultureInfo("pt-BR");
CultureInfo usa = new CultureInfo("en-US");
output = value.ToString("C4", brazil.NumberFormat); //output is R$ 0,0341
output = value.ToString("C4", usa.NumberFormat); //output is $0.0341

【讨论】:

【参考方案2】:

自定义格式字符串中的,. 已转换为当前区域性的正确分隔符。您不需要更改代码。见MSDN。

【讨论】:

啊,你是对的。显然我的问题是生成字符串的线程没有按照我认为我指定的文化运行。 我看到的唯一另一个问题是货币,如果我想要 2-4 位小数精度并在前面加上当前文化的货币符号,有没有好的方法来做到这一点?使用“$###,##0.00##”将始终使用“$”,因为它不是文化货币符号的占位符(根据 MSDN),对吗? 看我的回答,把N4改成C4就行了

以上是关于全球化自定义数字格式 - 可变小数点的主要内容,如果未能解决你的问题,请参考以下文章

格式化字符串:自定义数字格式

使用自定义组和小数分隔符将数字格式化为字符串而不更改精度

15、pandas的设置数字格式,小数位数、百分号、千位分隔符

Shiny 和 R 中的 DT:自定义数字格式

EXCEL中小数点后面的0怎么去掉?比如2.000 我想把后面的0去掉,表格中几百个统一去掉

带有千位分隔符和小数的数字格式(如有必要)