我需要验证双值。当我TryParse .00 or ,00
返回false
时,我允许此值必须为真。
此代码无法正常使用
model =,00或.002或789或.12 ......
double number;
double.TryParse(model, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out number)
答案 0 :(得分:3)
您可以循环所有支持的文化:
bool parsable = false;
double number = 0;
var supportedCultures = new[] { CultureInfo.InvariantCulture, CultureInfo.CreateSpecificCulture("de-DE") };
foreach(var culture in supportedCultures)
{
parsable = double.TryParse(model, NumberStyles.Any, culture, out number);
if (parsable)
break;
}
或使用LINQ:
CultureInfo thisCulture = supportedCultures
.FirstOrDefault(c => double.TryParse(model, NumberStyles.Any, c, out number));
if (thisCulture != null)
{
Console.WriteLine("Number was parsable to " + number);
}
旧的方法,像asawyer指出的那样容易出错("1,000,000.00"
):
您可以用点替换逗号:
bool parsable = double.TryParse(model.Replace(",", "."), NumberStyles.Any, NumberFormatInfo.InvariantInfo, out number);
击> <击> 撞击>
答案 1 :(得分:0)
当您使用NumberFormatInfo.InvariantInfo
时,您强制解析器将.
视为小数点分隔符,将,
视为千位分隔符。所以
double.TryParse(".002", out number)
会返回true,但是
double.TryParse(",789", out number)
不会。
如果您想支持多种格式,则必须为每种格式调用TryParse
。没有办法尝试解析在格式中有效的数字,因为它们可能返回不同的值。 "123,456"
可以通过两种不同的方式解释,具体取决于您使用的文化。
答案 2 :(得分:0)
我认为你不能安全地做到这一点。如果您设法让系统处理将"."
和","
定义为小数分隔符和分组分隔符的两种方式,那么就会遇到歧义问题。
例如,如果传入"1.001"
怎么办?那么"1,001"
呢?你怎么知道其中任何一个真的意味着“千分之一”还是“千分之一”?