我需要將字符串轉換爲C#中的小數,但此字符串具有不同的格式。將字符串轉換爲格式爲
例如:
「50085」
「500,85」
「500.85」
這應該是十進制轉換爲500,85。是否有一個簡化的形式來使用格式來做這個轉換?
我需要將字符串轉換爲C#中的小數,但此字符串具有不同的格式。將字符串轉換爲格式爲
例如:
「50085」
「500,85」
「500.85」
這應該是十進制轉換爲500,85。是否有一個簡化的形式來使用格式來做這個轉換?
雖然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;
}
我沒有找到任何格式來解決我的問題。 我使用這個實現並添加小數位。 謝謝 – 2011-05-12 20:11:03
這將工作,這取決於你的文化設置:
string s = "500.85";
decimal d = decimal.Parse(s);
如果你的文化不被默認允許,
而不是.
作爲一個小數點,你可能需要:
s = s.Replace(',','.');
但是需要檢查多個.
......這似乎歸結爲更多的投入消毒問題。如果您能夠驗證和消毒輸入以符合一系列規則,則轉換爲十進制將更容易。
+1用於提及輸入消毒... -1用於不處理「50085」。平衡到沒有投票:) – 2011-05-11 11:40:25
我擔心也可能有一個輸入像'50.865,85' – V4Vendetta 2011-05-11 11:53:36
@Chris,50085會導致50085後decimal.Parse ...我會接受沒有投票,雖然我不接受我認爲這完全回答了OP的問題。 :) – Jaymz 2011-05-11 12:03:00
有許多方法:
System.Convert.ToDecimal("232.23")
Double.Parse("232.23")
double test;
Double.TryParse("232.23", out test)
確保你試圖趕上...
有些文化用一個逗號來表示浮點。你可以用一個aspx頁面上下面的代碼測試:
var x = decimal.Parse("500,85");
Response.Write(x + (decimal)0.15);
這給出了答案501當線程文化已被設置爲使用逗號作爲浮點文化。您可以強制使用像這樣:
var x = decimal.Parse("500,85", new NumberFormatInfo() { NumberDecimalSeparator = "," });
試試下面這段代碼:
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構造函數。
這是一個新功能,稱爲數字分組符號。
步驟:
實施例:
string checkFormate = "123e123";
decimal outPut = 0.0M;
decimal.TryParse(checkFormate, out outPut);
Ans: outPut=123123;
十進制不以 「500,85」 的格式存儲。你在問一對小數嗎? – 2011-05-11 11:19:35
@myermian:嗯,它可以,這取決於你的文化/區域設置。不是每個人都以相同的方式表示小數值。在這個例子中,'500,85'可能相當於'500.85'。 – 2011-05-11 11:36:53
在你的字符串中可能是'50.865,85'嗎? – V4Vendetta 2011-05-11 11:54:33