我需要驗證雙精度值。當我TryParse .00 or ,00
返回false
,但我允許這個值必須爲true。TryParse雙精度值
此代碼不是這種情況下正常工作
模型= 00或0.002,或789或0.12 ...
double number;
double.TryParse(model, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out number)
我需要驗證雙精度值。當我TryParse .00 or ,00
返回false
,但我允許這個值必須爲true。TryParse雙精度值
此代碼不是這種情況下正常工作
模型= 00或0.002,或789或0.12 ...
double number;
double.TryParse(model, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out number)
你可以循環所有支持文化:
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);
當您使用NumberFormatInfo.InvariantInfo
您強制解析器將.
作爲小數分隔符,將,
作爲千位分隔符。所以
double.TryParse(".002", out number)
將返回true,但
double.TryParse(",789", out number)
不會。
如果你想支持多種格式,你必須爲每種格式調用TryParse
。沒有辦法嘗試和解析一個格式有效的數字,因爲它們可能會返回不同的值。根據您使用的文化不同,"123,456"
可能被解釋爲兩種不同的方式。
我不認爲你可以真正安全地做到這一點。如果您設法讓系統處理將"."
和","
定義爲小數點分隔符和分組分隔符的兩種方法,那麼您會遇到模糊不清的問題。
例如,如果"1.001"
被傳入?那麼"1,001"
?你怎麼知道一個是真的意味着「千分之一」還是「千分之一」?
爲什麼不閱讀[documentation](http://msdn.microsoft.com/en-us/library/3s27fasw%28v=vs.110%29.aspx)? – Andreas
運行這個'「.00」'成功解析爲'0','「,00」'返回false。 – asawyer
我需要「,00」返回true也 – zrabzdn