【问题标题】:Convert number into culture specific将数字转换为特定于文化的
【发布时间】:2017-11-16 07:23:50
【问题描述】:

我有一个类似202667.4 的号码。我想将其转换为基于文化的数字

例如:

在“de”(德语)中,数字应为 202.667,40

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: c# localization number-formatting cultureinfo culture


    【解决方案1】:

    如果您想以文化特定格式表示现有数字(例如,double),请尝试格式化

    https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings

    double source = 202667.4;
    
    // "n"  - ... group separators, and a decimal separator with optional negative sign  
    // "de" - German culture
    string result = source.ToString("n", CultureInfo.GetCultureInfo("de"));
    
    Console.WriteLine(result);
    

    结果

    202.667,40
    

    如果给你一个string 并且你想要一个数字,请输入Parse (TryParse):

    string data = "202.667,40";
    
    double result = double.Parse(data, CultureInfo.GetCultureInfo("de"));
    
    Console.WriteLine(data.ToString(CultureInfo.InvariantCulture));
    

    如果您不想在每次使用格式时都指定文化,您可以将文化设置为当前

    CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("de");
    
    ...
    
    double source = 202667.4;
    
    Console.WriteLine($"{source:n}");
    

    【讨论】:

    • 坦克@Dmitry,它成功了。但是,我希望输出为数字而不是字符串。有什么办法吗?
    • @Manikandan Ram: 数字总是相同的,但它的表示(作为字符串)可以变化(即我们希望202667.4 在德国文化中以组和小数分隔符),这就是我们使用格式的原因。
    【解决方案2】:

    您可以在将数字解析为德语格式时使用文化信息

    试试这个方法:

    string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:000,000.00}", <your number>)
    

    例如:

     string result = string.Format(System.Globalization.CultureInfo.GetCultureInfo("de-DE"), "{0:000,000.00}", 202667.4)
    

    【讨论】:

    • 我试过了。但是,它不起作用。 System.Globalization.CultureInfoculture = new System.Globalization.CultureInfo("de"); double num = Double.Parse("202667.4", 文化); 2026674.0 我错过了什么?
    • 我不明白你的评论@ManikandanRam,double 没有格式。格式化在解释字符串以解析它时发挥作用,但看起来它正确解析了您的数字字符串,并且在格式化字符串时发挥作用,您在评论中没有这样做。
    【解决方案3】:
     System.Globalization.CultureInfo EnglishCulture = new 
    System.Globalization.CultureInfo("en-EN");
    System.Globalization.CultureInfo GermanCulture = new 
    System.Globalization.CultureInfo("de-de");
    

    必要的转换,

    double val;
    if(double.TryParse("65,89875", System.Globalization.NumberStyles.Float, 
    GermanCulture,  out val))
    {
    string valInGermanFormat = val.ToString(GermanCulture);
    string valInEnglishFormat = val.ToString(EnglishCulture);
     }
    
    if(double.TryParse("65.89875", System.Globalization.NumberStyles.Float, 
    EnglishCulture,  out val))
    {
    string valInGermanFormat = val.ToString(GermanCulture);
    string valInEnglishFormat = val.ToString(EnglishCulture);
     }
    

    【讨论】:

      【解决方案4】:

      您可以使用此代码将变量转换为不同的文化:

      int MyInt = 100;
      string MyString = MyInt.ToString("C",CultureInfo.GetCultureInfo("de-DE"));
      MessageBox.Show(MyString);
      

      如果您想使用德语格式构建所有程序,您可以在主类中编写以下代码:

      using System.Globalization;`
      
      Application.CurrentCulture = CultureInfo.GetCultureInfo("de-DE");`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-10-28
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-06
        • 2017-02-22
        相关资源
        最近更新 更多