这应该是一个简单的问题,但是......
我需要在C#
中格式化显示(字符串)的货币有问题的货币将有自己的规则,例如要使用的符号以及该符号是否应该在价值之前(例如10美元)或之后(例如10₫是越南盾)。
但数字的格式取决于用户本地而非货币。
E.g。
1.234,56 ₫ should be displayed to a user in Vietnam but
1,234.56 ₫ should be displayed to a user in the US
(格式化为代码,很容易看出它之间的区别,和。)
代码如
Double vietnamTotal = 1234.56;
return vietnamTotal.ToString("c");
不会起作用,因为它将使用用户(或更准确的CultureInfo.CurrentCulture)区域设置格式和货币,所以你会得到$ 1,123.56之类的东西 - 正确使用,和。但错误的符号。
Double vietnamTotal = 1234.56;
CultureInfo ci = new CultureInfo(1066); // Vietnam
return vietnameTotal.ToString("c",ci));
会给1.234,56₫ - 正确的符号,错误的使用和。对于当前用户。
这篇文章gives more detail关于正确的事情,但不是如何去做。
我遗漏了哪些隐藏在框架中的明显方法?
答案 0 :(得分:27)
NumberFormatInfo
并将其克隆CurrencySymbol
设置为相关货币的CurrencySymbol
CurrencyPositivePattern
和CurrencyNegativePattern
。例如:
using System;
using System.Globalization;
class Test
{
static void Main()
{
decimal total = 1234.56m;
CultureInfo vietnam = new CultureInfo(1066);
CultureInfo usa = new CultureInfo("en-US");
NumberFormatInfo nfi = usa.NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
NumberFormatInfo vnfi = vietnam.NumberFormat;
nfi.CurrencySymbol = vnfi.CurrencySymbol;
nfi.CurrencyNegativePattern = vnfi.CurrencyNegativePattern;
nfi.CurrencyPositivePattern = vnfi.CurrencyPositivePattern;
Console.WriteLine(total.ToString("c", nfi));
}
}
不可否认,我的控制台无法显示正确的符号,但我确信这只是因为字体问题:)
答案 1 :(得分:1)
对不起,我在这里可能会有点慢,但我仍然没有看到你的观点。在我看来,最初的问题是“我有一个值,在越南,我希望按照越南货币格式显示,带有”₫“符号,而在美国,我希望按照美国显示货币格式,但仍然带有“₫”。“。
我想我对两个相互矛盾的陈述感到困惑...... “有问题的货币将有自己的规则”和“数字的格式取决于用户本地[原文如此],而不是货币。“
如果你想改变的只是货币符号,并按照当前文化保留格式,那么不会克隆nfi并设置符号就足够了吗?
NumberFormatInfo nfi;
// pretend we're in Vietnam
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("vi-VN");
nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo;
nfi.CurrencySymbol = "₫";
String s1 = (1234.5678).ToString("c", nfi);
// pretend we're in America
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
nfi = CultureInfo.CurrentCulture.NumberFormat.Clone() as NumberFormatInfo;
nfi.CurrencySymbol = "₫";
String s2 = (1234.5678).ToString("c", nfi);
答案 2 :(得分:0)
要使用文本框,请尝试以下操作:
textBox2.Text = "Rp" + (textBox1.Text = string.Format(System.Globalization.CultureInfo.GetCultureInfo("id-ID"), "{0:#,##0.00}", double.Parse(textBox1.Text)));