2011-05-11 283 views
6

我需要將字符串轉換爲C#中的小數,但此字符串具有不同的格式。將字符串轉換爲格式爲

例如:

「50085」

「500,85」

「500.85」

這應該是十進制轉換爲500,85。是否有一個簡化的形式來使用格式來做這個轉換?

+0

十進制不以 「500,85」 的格式存儲。你在問一對小數嗎? – 2011-05-11 11:19:35

+2

@myermian:嗯,它可以,這取決於你的文化/區域設置。不是每個人都以相同的方式表示小數值。在這個例子中,'500,85'可能相當於'500.85'。 – 2011-05-11 11:36:53

+0

在你的字符串中可能是'50.865,85'嗎? – V4Vendetta 2011-05-11 11:54:33

回答

14

雖然decimal.Parse( )是th你正在尋找的方法,你將不得不提供更多的信息。它不會自動選擇你給出的3種格式,你必須告訴它你期待的格式(以IFormatProvider的形式)。請注意,即使使用IFormatProvider,我也不認爲「50085」會被正確拉入。

我看到的唯一一致的事情是,從您的示例中可以看出,您總是希望精確度有兩位小數。如果是這樣的話,你可以去掉所有的句號和逗號,然後乘以100

也許是這樣劃分:

public decimal? CustomParse(string incomingValue) 
{ 
    decimal val; 
    if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val)) 
     return null; 
    return val/100; 
} 
+0

我沒有找到任何格式來解決我的問題。 我使用這個實現並添加小數位。 謝謝 – 2011-05-12 20:11:03

6

這將工作,這取決於你的文化設置:

string s = "500.85"; 
decimal d = decimal.Parse(s); 

如果你的文化不被默認允許,而不是.作爲一個小數點,你可能需要:

s = s.Replace(',','.'); 

但是需要檢查多個. ......這似乎歸結爲更多的投入消毒問題。如果您能夠驗證和消毒輸入以符合一系列規則,則轉換爲十進制將更容易。

+0

+1用於提及輸入消毒... -1用於不處理「50085」。平衡到沒有投票:) – 2011-05-11 11:40:25

+0

我擔心也可能有一個輸入像'50.865,85' – V4Vendetta 2011-05-11 11:53:36

+0

@Chris,50085會導致50085後decimal.Parse ...我會接受沒有投票,雖然我不接受我認爲這完全回答了OP的問題。 :) – Jaymz 2011-05-11 12:03:00

1

有許多方法:

  1. System.Convert.ToDecimal("232.23")
  2. Double.Parse("232.23")
  3. double test; Double.TryParse("232.23", out test)

確保你試圖趕上...

13

有些文化用一個逗號來表示浮點。你可以用一個aspx頁面上下面的代碼測試:

var x = decimal.Parse("500,85"); 
Response.Write(x + (decimal)0.15); 

這給出了答案501當線程文化已被設置爲使用逗號作爲浮點文化。您可以強制使用像這樣:

var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," }); 
3

試試下面這段代碼:

string numValue = "500,85"; 
System.Globalization.CultureInfo culInfo = new System.Globalization.CultureInfo("fr-FR"); 
decimal decValue; 
bool decValid = decimal.TryParse(numValue, System.Globalization.NumberStyles.Number, culInfo.NumberFormat, out decValue); 
if (decValid) 
{ 
    lblDecNum.Text = Convert.ToString(decValue, culInfo.NumberFormat); 
} 

因爲我給的500,85值我會認爲文化是法國人,因此小數點分隔符「,」。然後decimal.TryParse(numValue,System.Globalization.NumberStyles.Number,culInfo.NumberFormat,out decValue); 將以decValue的形式返回值爲500.85。同樣,如果用戶是英語美國人,然後更改culInfo構造函數。

1

這是一個新功能,稱爲數字分組符號

步驟:

  1. 打開區域和語言選項控制面板
  2. 點擊附加設置
  3. 在數字選項卡
  4. 設置數字分組符號的自定義設置。 更改逗號;替換爲(任何字符爲A到Z或{/,})。 數字分組符號= e;

實施例:

string checkFormate = "123e123"; 
decimal outPut = 0.0M; 
decimal.TryParse(checkFormate, out outPut); 
Ans: outPut=123123;