如何基于货币符号(例如欧元(€)等)将123456789转换为1.234.567,89? 我有123456789,我想要€1.234.567,89
我尝试使用CurrentCulture,但无法解决
答案 0 :(得分:3)
使用.ToString("C")
。像这样:
var cost = 123456789;
Console.WriteLine(cost.ToString("C"));
使用当前正在运行的系统的区域性。因此,如果您为欧元设置了区域设置,它将显示为欧元。
要强制其使用特定的文化,您可以使用此语言(此示例使用的是法国,因此显示的是欧元):
cost.ToString("C", CultureInfo.CreateSpecificCulture("fr-FR"))
更多信息在这里,包括如何更改默认区域性(而不是每次都指定):https://docs.microsoft.com/en-us/globalization/locale/currency-formatting-in-the-dotnet-framework
答案 1 :(得分:0)
您的问题不清楚。
Gabriel Luci的答案假设您(或创建后端DB的任何人)都试图通过将Currency值存储为整数来解决Floating Point imprecision的问题。这是一种非常可靠且受时间尊重的方法。出于法律原因,甚至可能需要存储4位精度(即使您仅出于正常使用目的只显示两位数字,会计也可能需要该精度级别)。
如果数据是String / NVARCHAR,则在Garbiel Lucis Solution工作之前,您首先必须将其解析为整数。我建议使用BigInteger,因为它对最大可存储编号没有上限。或者,您可以通过字符串处理(添加一些逗号和小数点)来修改字符串
您在标签中也提到了asp.net。网络服务器因存在文化问题而臭名昭著。当前文化使用计算机的文化,网页正在运行。您需要的是浏览器运行所在的文化。 我不确定是否有任何简便的方法来获取浏览器的附加文化。或者,如果您能以某种方式让浏览器为您完成翻译,那么它就会使用它所运行的区域性。
答案 2 :(得分:0)
让我们假设您有字符串(“最糟糕”的情况)
示例代码:
string rawString = "123456789";
// 1. Raw string to raw value (integer) conversion
int rawInt = Int32.Parse(rawString);
// 2. Integer to expected double value (given we know we need 2 decimals)
double currencyDouble = rawInt /100.0;
// 3. Expected double value to formated string
string currencyString = currencyDouble.ToString("C", CultureInfo.CreateSpecificCulture("es"));
Console.WriteLine(currencyString);
// Outputs: 1.234.567,89 €
这将是通用方法:
static string IntStringToCurrencyStringWithDecimals(string rawString, string locale, int decimals) {
int rawInt = Int32.Parse(rawString);
double currencyDouble = rawInt /Math.Pow(10.0, decimals);
return currencyDouble.ToString("C", CultureInfo.CreateSpecificCulture(locale));
}
通用方法产生:
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 0));
// Outputs: 123.456.789,00 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 2));
// Outputs: 1.234.567,89 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 4));
// Outputs: 12.345,68 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "es", 6));
// Outputs: 123,46 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "fr", 2));
// Outputs: 1 234 567,89 €
Console.WriteLine(IntStringToCurrencyStringWithDecimals("123456789", "de", 2));
// Outputs: 1.234.567,89 €