这应该是一个容易的问题,但......
我需要在C#中格式化显示(字符串)的货币
有问题的货币将有自己的规则,例如要使用的符号以及该符号是否应该在价值之前(例如10美元)或之后(例如10₫是越南盾).
但数字的格式取决于用户本地,而不是货币.
例如
1.234,56 ? should be displayed to a user in Vietnam but
1,234.56 ? should be displayed to a user in the US
Run Code Online (Sandbox Code Playgroud)
(格式化为代码,因此很容易看出它们之间的区别,和.)
所以代码就像
Double vietnamTotal = 1234.56;
return vietnamTotal.ToString("c");
Run Code Online (Sandbox Code Playgroud)
将无法工作,因为它将使用用户(或更准确的CultureInfo.CurrentCulture)区域设置格式和货币,所以你会得到$ 1,123.56之类的东西 - 正确使用,和.但错误的符号.
Double vietnamTotal = 1234.56;
CultureInfo ci = new CultureInfo(1066); // Vietnam
return vietnameTotal.ToString("c",ci));
Run Code Online (Sandbox Code Playgroud)
会给1.234,56₫ - 正确的符号,错误的使用,和.对于当前用户.
这篇文章提供了有关正确的事情的更多细节,但没有提供如何做到这一点.
我错过了隐藏在框架中的明显方法?
下面列出的场景的最佳做法是什么?
我们有一个应用程序,我们想支持多种货币.该软件将尊重用户的区域设置和区域设置,以指示正确的数字格式,即$ 10,000.00或10.000,00₴等.
但是,我们希望能够根据货币ID(可能是三个字母的ISO4217代码)格式化不同的数字.我们的想法是使用每种货币在数据库中存储一个表,然后请求用户选择将使用的货币符号.然后,程序将根据区域设置/区域设置格式化所有数字,但将使用我们程序中定义的货币符号.
因此,给出以下数值和货币
10000 AUD
5989.34 USD
450 EUR
该计划将输出
$ 10,000.00
$ 5,989.34
€450.00
或者使用区域设置将数字格式化为#####,## $结果将是;
10000,00 $
5989,34 $
450,00€
尊重区域设置/区域编号格式但显示不同的货币,最佳做法是什么?
我希望这是有道理的.
使用的技术是c#.NET 2.0.
如果您格式化的货币不是当前文化的本机货币,那么格式化货币的正确方法是什么?
例如,如果我为fr-FR文化格式化美元,我会将其格式化为en-US文化($ 1,000.00)或fr-FR文化,但将欧元符号更改为美元符号(1 000,00) $).或许别的东西($ 1 000,00或1 000,00 USD)?