将数字转换为特定于文化的

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");`

【讨论】:

以上是关于将数字转换为特定于文化的的主要内容,如果未能解决你的问题,请参考以下文章

将 VarChar 转换为具有不同文化格式的浮点数

FreeMarker 将带逗号的字符串转换为数字

php 为特定于站点的插件添加Edit Buttin

printf 的浮点格式标志 (%f) 仅适用于英文数字格式

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

提醒 - \r\n 或 \n\r?