本文介绍了双的TryParse值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要验证双重价值。当我的TryParse .00或00 收益,但我让这个值必须如此。



这代码不是这种情况下,正常工作



模式= 00或0.002,或789,或0.12 ...

 双号; 
double.TryParse(型号,NumberStyles.Any,NumberFormatInfo.InvariantInfo,出号)


解决方案

您可以循环所有支持的文化:

 布尔可解析= FALSE; 
双号= 0;
变种supportedCultures =新[] {CultureInfo.InvariantCulture,CultureInfo.CreateSpecificCulture(去DE)};
的foreach(在supportedCultures VAR文化)
{
解析的= double.TryParse(型号,NumberStyles.Any,文化,出号);
如果(可解析)
中断;
}

或LINQ:

  CultureInfo的thisCulture = supportedCultures 
.FirstOrDefault(C => double.TryParse(型号,NumberStyles.Any,C,出号));
如果(thisCulture!= NULL)
{
Console.WriteLine(数字是可解析为+号);
}



老办法,太容易出错asawyer指出(1,000,000.00):




I need validate double values. When I TryParse .00 or ,00 return false, but I allow this values must true.

This code not work correctly for this case

model = ,00 or .002 or ,789 or .12 ...

double number;
double.TryParse(model, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out number)
解决方案

You could loop all supported cultures:

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;
}

or with LINQ:

CultureInfo thisCulture = supportedCultures
    .FirstOrDefault(c => double.TryParse(model, NumberStyles.Any, c, out number));
if (thisCulture != null)
{
    Console.WriteLine("Number was parsable to " + number);
}

old approach, too error-prone as asawyer has pointed out("1,000,000.00"):

这篇关于双的TryParse值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-24 08:17