簡體   English   中英

C#>輸入=“”時將字符串轉換為雙精度

[英]C# > Convert string to double when input=“”

我想將字符串轉換為雙精度字(不是很基本的問題嗎?)

string input = "45.00000";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);

=>我的代碼有效,我非常高興。

但是我可能有以下情況

string input = "";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);

在這種情況下,我的代碼無法正常工作,並且我收到Exception錯誤;(我想知道如何處理這種情況。理想情況下,當我得到此值時,我希望變量編號等於null。

誰能幫我 ? 謝謝

Microsoft建議使用Tester-Doer模式,如下所示:

string input = "";
double numberd;
if( Double.TryParse(input, out numberd) )
{
    // number parsed!
}

使用Double進行解析,但是使用Double? 儲存價值,也許?

Double number;
string input = ""; // just for demo purpose, naturally ;o)
Double? nullableNumber = 
    Double.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out number) 
    ? (Double?)number 
    : null;

// use nullableNumber

double這樣的基本類型不能為null。 您可以使用帶有double?的可空版本double? 但是, Double.Parse不返回double? Double.Parse double? (只是普通的double )。

您可以使用Double.TryParse並檢查返回條件並設置一個double? 如果更合適,則將其相應地為null。

為什么不只捕獲異常並設置變量?

double numberd;
try {
  numberd = Double.Parse(input, CultureInfo.InvariantCulture);
} catch (System.FormatException e)
  numberd = 0.0;
}

或者,您可以使用Double.TryParse

怎么樣

Double? numberd = String.IsNullOrEmpty(str) ? null : Double.Parse(str)

在我的應用程序中,我正在解析CSV文件,我希望這些空字符串為零,因此我返回0.0而不是null,這一切都很好。

另外5個

添加一條if語句,比較字符串或環繞try / catch塊。

假設您不擔心空字符串以外的其他無效值,這是一個簡單的一線式:

Double? numberd = (input.Length == 0) ? null : (Double?)Double.Parse(input, CultureInfo.InvariantCulture);

mzabsky走在正確的道路上,但是他的解決方案無法建立,並且您不應該對空字符串進行硬編碼-最好檢查字符串的長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM