用千位分隔符解析十进制 [英] Parsing decimal with thousands separator

查看:79
本文介绍了用千位分隔符解析十进制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码块:

string price = "1,234.56";
decimal value = 0;
var allowedStyles = (NumberStyles.AllowDecimalPoint & NumberStyles.AllowThousands);

if (Decimal.TryParse(price, allowedStyles, CultureInfo.InvariantCulture, out value))
{
    Console.log("Thank you!");
}
else
{
    throw new InvalidFormatException();
}

最终,price将采用美式风格(即1,234.56)或德国风格(即1.234,56).我现在面临的挑战是Decimal.TryParse失败.我怀疑是因为有数千个分隔符.这就是为什么我添加了allowedStyles变量的原因.

Ultimately, price will either be in US style (i.e. 1,234.56) or German style (i.e. 1.234,56). My challenge is right now, Decimal.TryParse fails. I suspect its because of the thousands separator. Which is why I added the allowedStyles variable.

我在做什么错了?

推荐答案

如果您 AND -组合NumberStyles标志,您将得到None.

If you AND-combine the NumberStyles-flag, you will get None.

00100000 (AllowDecimalPoint)
&
01000000 (AllowThousands)
--------
00000000 (None)

尝试-组合它们:NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands

00100000 (AllowDecimalPoint)
|
01000000 (AllowThousands)
--------
01100000 (AllowDecimalPoint, AllowThousands)

此外,恐怕您无法使用一个语句来解析两种样式(美式和DE式).

Additionally, I'm afraid that you can't parse both styles (US style and DE style) with one statement.

所以我会同时尝试:

string price = "1,234.56";
decimal value = 0;
var allowedStyles = (NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands);

if (Decimal.TryParse(price, allowedStyles, CultureInfo.GetCultureInfo("DE-de"), out value))
{
    Console.Write("Danke!");
}
else if (Decimal.TryParse(price, allowedStyles, CultureInfo.GetCultureInfo("EN-us"), out value))
{
    Console.Write("Thank you!");
}
else
{
    throw new InvalidFormatException();
}

这篇关于用千位分隔符解析十进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆