将数字转换为特定于文化的
Posted
技术标签:
【中文标题】将数字转换为特定于文化的【英文标题】:Convert number into culture specific 【发布时间】:2017-11-16 07:23:50 【问题描述】:我有一个类似202667.4
的号码。我想将其转换为基于文化的数字。
例如:
在“de”(德语)中,数字应为 202.667,40。
任何帮助将不胜感激。
谢谢。
【问题讨论】:
【参考方案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");`
【讨论】:
以上是关于将数字转换为特定于文化的的主要内容,如果未能解决你的问题,请参考以下文章