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

我有一个多语言的 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.##" 而是。

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

【问题讨论】:

    标签: vb.net globalization cultureinfo culture


    【解决方案1】:

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

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

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

    N{n} 格式使用“数字”格式,后面的整数是小数点后的位数:

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

    【讨论】:

    • 这是乌龙所以可能是N0
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多