VB.NET 根据所选文化格式化数字

Posted

技术标签:

【中文标题】VB.NET 根据所选文化格式化数字【英文标题】:VB.NET Formatting numbers according culture selected 【发布时间】:2016-02-28 23:59:25 【问题描述】:

我有一个多语言的 vb.net 应用程序。

我正在尝试格式化一个数字(ULong)以根据当前语言货币组分隔符显示它:

value.ToString("0.##", CultureInfo.CurrentCulture)

CultrueInfo.CurrentCulture 可以是英语 (en-GB)、西班牙语 (es-ES) 或加泰罗尼亚语 (ca-ES),具体取决于应用中选择的语言。

问题如下:

    如果选择了西班牙语 (es-ES),则值不正确 格式化为西班牙语货币组分隔符是',' 而不是"0.##"中的'.',所以我需要用"0,##"代替。

例如 1200 被格式化为 1200 而不是 1.200

    但如果我将掩码更改为"0,##",那么如果语言设置为 en-GB, 值未正确格式化为它的货币组分隔符 是".",而不是"0,##" 中的",",所以我需要输入"0.##" 而是。

那么如何自动调整掩码以适用于所有语言?检测语言并相应地设置正确的掩码?但是对于少数语言来说还可以,但不适合很多语言...

【问题讨论】:

【参考方案1】:

问题是您正在硬编码小数点(,. 字符)。

改用标准格式字符串。见这里:https://msdn.microsoft.com/en-us/library/dwhawy9k%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

N - 数字 - 整数和小数位、组分隔符和带有可选负号的小数分隔符。

Nn 格式使用“数字”格式,后面的整数是小数点后的位数:

value.ToString("N2", CultureInfo.CurrentCulture)

【讨论】:

这是乌龙所以可能是N0

以上是关于VB.NET 根据所选文化格式化数字的主要内容,如果未能解决你的问题,请参考以下文章

根据文化代码在Python中格式化数字

在VB.NET中如何将日期类型转化为String型?

根据文化信息动态配置Angular中的数字格式

在文本框 VB.Net 中格式化和计算数字

vb.net 导出csv后数字格式问题

JavaScript:使用 .NET String.Format() 之类的文化格式化数字/货币?