我正在研究C#應用程序。我想用逗號(,)更改小數點數字,其中我使用正則表達式使用點(。)。使用RegEx替換點(。)和逗號(,)?
例如:
Price= 100,00.56
作爲代表的數值,但我瑞典的這個國際規則,他們有像
Price= 100.00,56
對數字不同的方式所以我想改變點到逗號(,) (,)和逗號(,)轉換爲使用RegEx的點(。)。可以指導我這一點。
我正在研究C#應用程序。我想用逗號(,)更改小數點數字,其中我使用正則表達式使用點(。)。使用RegEx替換點(。)和逗號(,)?
例如:
Price= 100,00.56
作爲代表的數值,但我瑞典的這個國際規則,他們有像
Price= 100.00,56
對數字不同的方式所以我想改變點到逗號(,) (,)和逗號(,)轉換爲使用RegEx的點(。)。可以指導我這一點。
格式化數字,你應該使用需要CultureInfo
對象string format overload。 swedish的文化名稱是「sv-SE」,可以看到here。
decimal value = -16325.62m;
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("sv-SE")));
編輯:
由於@OregonGhost指出 - 解析出號碼也應CultureInfo
完成。
即使沒有正則表達式,你也可以做到這一點。例如
var temp = price.Replace(".", "<TEMP>");
var temp2 = temp.Replace(",", ".");
var replaced = temp2.Replace("<TEMP>", ",");
不確定什麼100,00.56代表,你的意思是10.000,56?
回答你的問題:
對於這樣一個簡單的任務,爲什麼要使用RegEx?你可以這樣做很容易:
string oldValue = "100,00.56";
char dummyChar = '&'; //here put a char that you know won't appear in the strings
var newValue = oldValue.Replace('.', dummyChar)
.Replace(',', '.')
.Replace(dummyChar, ',');
編輯 我同意@Oded,用來格式化數字使用CultureInfo
類。
'100,00.56'是一個英文表達,'10。000,56' - Sweden/Russian/etc – abatishchev 2010-08-04 10:05:20
@abati:我想他是在談論OP的例子在千位分隔符和小數點分隔符之間只有兩位數的事實。這可能只是一個錯字。 – 2010-08-04 12:14:28
@Alan:你說得對,沒有馬上提及 – abatishchev 2010-08-04 12:26:04
也看看
System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator
不要依賴於正則表達式爲這種事情:)使用的構建在文化FX:
decimal s = decimal.Parse("10,000.56", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
string output = s.ToString("N",CultureInfo.GetCultureInfo("da-DK"));
的en-US將正確分析和da-DK使用另一種表示法。我住在DK,因此使用它,但你應該使用適合你的輸出的文化。
不是一個正則表達式的解決方案,但是從我的經驗 - 更正確的:
public static string CheckDecimalDigitsDelimiter(this string instance)
{
var sv = new CultureInfo("sv-SE");
var en = new CultureInfo("en-US");
decimal d;
return (!Decimal.TryParse(instance, NumberStyles.Currency, sv, out d) &&
Decimal.TryParse(instance, NumberStyles.Currency, en, out d)) ?
d.ToString(sv) : // didn't passed by SV but did by EN
instance;
}
這是什麼方法呢?它確保如果給定的字符串是不正確的瑞典字符串,但是正確的英文 - 將其轉換爲瑞典,例如, 100,00 -> 100,00
但是100.00 -> 100,00
。
虛擬+1,可悲的是我今天沒票了。但知道你贏了它。 :) – sarnold 2010-08-04 09:50:19
偉大的思想..對齊+1 :-) – 2010-08-04 09:50:33
爲標準的解決方案。需要注意的是,這不僅是* formatting *的解決方案,而且還*用於解析*數字。 – OregonGhost 2010-08-04 10:00:45