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

VB.NET Formatting numbers according culture selected

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

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

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

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

问题如下:

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

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

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

那么如何自动调整掩码以适用于所有语言?检测语言并相应地设置正确的掩码?但它适用于一些语言但不适用于很多语言...

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

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

N - Number - Integral and decimal digits, group separators, and a decimal separator with optional negative sign.

N{n}格式使用"Number"格式,后面跟一个整数是小数点后的位数:

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