2016-12-21 46 views
-1

現在我有這個問題在這裏用逗號和點在小數點和千位分隔符。字符串雙貨幣有錯誤的結果(逗號點問題)

我的程序從不同來源獲得價格。

一些美國的一些歐洲 一些價格就這樣產生了2000,0.20爲20000.20

有的像2000.0,20再次20000.20

我無法找到一個辦法讓我的代碼來識別這些兩種格式。 我試圖用replace來將逗號變成圓點,但是如果數字中有成千上萬的分隔符,我會遇到問題。如何將字符串轉換爲沒有這些問題的雙倍?

我想這 但它只是不工作,如果有兩個不同的文化

  double.TryParse(price, NumberStyles.Currency, CultureInfo.InvariantCulture, out priceD); 
+0

我不知道爲什麼問一個問題會給我一個downvote。我想我必須繼續,並從116.9關閉 –

回答

1

這是我想出了

double FixUnknownCurrency(string amountText) 
{ 
    amountText = amountText?.Trim()?.Replace(" ", string.Empty); 
    if(string.IsNullOrWhiteSpace(amountText)) 
     return 0d; 

    if(amountText.Length < 3) 
     return double.Parse(amountText); 

    var currencyDecimal = amountText[amountText.Length-3]; 
    if(Char.IsNumber(currencyDecimal)) 
     return double.Parse(amountText); 

    if(currencyDecimal == '.' || currencyDecimal == ',') 
    { 
     amountText = amountText.Replace(",", string.Empty).Replace(".", string.Empty); 
     return double.Parse(amountText)/100d; 
    } 

    return double.Parse(amountText); 
} 

嘗試一下這裏。火車遲到:https://dotnetfiddle.net/HTiL4s

+0

它適用於美國和歐洲。我只需要測試東部格式,以確保。那麼我會設置這個帖子解決。謝啦 –

0

我不知道的比嘗試不同的文化,看看有什麼成功的其他更好的辦法。

創建這樣的方法:

public double CurrencyToDouble(string input) 
{ 
    // Will hold the result 
    double result = 0; 

    // Try US culture 
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.GetCultureInfo("en-US"), out result)) { return result; } 

    // Try DE culture 
    if (double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.GetCultureInfo("de-DE"), out result)) { return result; } 

    // Try current system culture 
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.CurrentCulture, out result)) { return result; } 

    // Try invariant culture 
    if(double.TryParse(input, System.Globalization.NumberStyles.Currency, System.Globalization.CultureInfo.InvariantCulture, out result)) { return result; } 

    // Try more common cultures... 

    // Unsuccessful, throw some kind of error 
    throw new FormatException("Could not convert!"); 
} 

輸入:

CurrencyToDouble( 「2000,0.20」);
CurrencyToDouble(「2000.0,20」);

輸出:

20000.2
20000.2

+0

我得到1169 –

+0

不要只複製和粘貼代碼,瞭解它爲什麼不行或不行。在這種情況下,我假設你的系統文化是en-US以外的東西,所以數字格式不正確。我已經添加了一行來首先嚐試en-US。你知道這些API的位置,所以你可以添加正確的文化。 – Equalsk