C# 将带符号的货币转换为十进制

C# 将带符号的货币转换为十进制,c#,.net,winforms,cultureinfo,C#,.net,Winforms,Cultureinfo,我有一个文本框,显示货币值,如250.00欧元、1000.00美元、100.00英镑等 我创建了基于货币符号的文化 var culture = new CultureInfo(symbol); //symbol may be en-US,en-GB etc.. culture.NumberFormat.CurrencyDecimalSeparator = "."; 目前正在做下面的事情 decimal amount; decimal.TryParse(txtAmount.Tex

我有一个文本框,显示货币值,如
250.00欧元、1000.00美元、100.00英镑等

我创建了基于货币符号的文化

  var culture = new CultureInfo(symbol); //symbol may be en-US,en-GB etc..
  culture.NumberFormat.CurrencyDecimalSeparator = ".";
目前正在做下面的事情

decimal amount;    
decimal.TryParse(txtAmount.Text, NumberStyles.Any, _culture, out rate);
这很好用

当金额>1000时,我对瑞典克朗有异议,因为它格式化了货币

i、 e

当输入100时,它变为100.00 kr,工作正常

当输入1000它1.000.00 kr时,它失败,金额变为0


想绕过这个问题吗?

您可以这样设置文化:-

CultureInfo sw= new CultureInfo("sv-SE");
sw = (CultureInfo)sw.Clone();
sw.NumberFormat.CurrencyPositivePattern = 3;
sw.NumberFormat.CurrencyNegativePattern = 3;
然后

var rate = 123.45M;
txtAmount.Text = rate.ToString("C", sw);
输出

123,45 kr

这一切都是为了创造文化


正如DanielGimenez指出的那样,我删除了
NumberFormat.currencydecimalsepender=“.”
并且一切正常

您的代码的哪一部分变成1000到1000.00 kr?这是需要更正的部分,因为它应该是1.000,00 kr。在转换之前,您可以删除“.”的所有出现,但最后一个除外。又快又脏;-)如何创建文化?@DanielGimenez:do
txtmount.Text=rate.ToString(“c2”,文化)目前的问题是,当您执行
rate.ToString(“c2”,_culture)时,服务器上的cultureInfo是错误的。您根本不必设置
CurrencyDecimalSeparator
。我将更新您的服务器。请使用问题的编辑链接添加其他信息。“发布答案”按钮只能用于问题的完整答案。@PaulRoub:对不起,您所说的完整答案是什么意思?这是SO审阅工具中的样板文本。事后看来,我扣动扳机太快了。保留评论只是为了让你的评论仍然有意义。