[英]How do I convert a string to a decimal, and format it for pretty output?
我想將“372551.40”轉換為十進制。 但是我需要轉換這個格式372.551,40后才能看到。
要將其轉換為十進制,您可以使用:
decimal decimalValue = 0.0;
decimalValue = decimal.Parse("372551.40");
或者
decimal.TryParse("372551.40", out decimalValue);
要以特定格式顯示它,您可以執行以下操作:
CultureInfo tr = new CultureInfo("tr-TR");
string formattedValue = decimalValue.ToString("c", tr);
//result will be 372.551,40 YTL
formattedValue = decimalValue.ToString("0,0.00", tr);
//result will be 372.551,40
請執行下列操作:
string s = "372551.40";
CultureInfo cultureInfo = CultureInfo.InvariantCulure; //Use relevant culture in which your number is formatted. In this case InvariantCulture would do.
decimal d;
bool succesful = Decimal.TryParse(s, NumberStyles.Number, cultureInfo, out d); //it will try to parse the string according to the specified culture.;
如果解析成功,則d
會將s
表示的數值存儲為decimal
值,您可以將其 output 轉換為任何格式化字符串並培養ToString()
或Format.String()
。
請注意,如果s
表示的數字所在的區域性是當前系統區域性,那么您可以在不需要指定NumberStyles
和IFormatProvider
的情況下使用TryParse(string s, out decimal d)
重載。
string value;
Decimal number;
value = "16,523,421";
if (!Decimal.TryParse(value,out number))
{
// set it to something if the "Value" is not a number
number = -1;
}
像這樣的東西?
string s = "372551.40";
decimal d;
if (decimal.TryParse(s, out d))
{
var culture = new CultureInfo("de-DE");
var result = d.ToString("0,0.00", culture);
// result is "372.551,40"
}
你也可以使用當前的文化,而不是像我那樣硬編碼。
希望這可以幫助,
約翰
您可以使用.Replace
string string 1 = "372,551.40";
string1.Replace(",","");
decimalVal = System.Convert.ToDecimal(StringVal);
//shows 372551.40
如果您正在玩大量數字,您總是可以將其放入 for 循環中。
您可以在MSDN上找到更多深入信息和一些示例
使用decimal.Parse()使其成為小數。 然后你有很多格式化選項。
您提到的顯示取決於文化設置。
制作新的 CultureInfo 並在 NumberFormat 中,您將不得不修改一些設置,例如 Decimal Separator as ,
Thousands Separator as .
並將其提供給保存十進制值的變量的ToString
方法。
這應該將值顯示為372.551,40
采用 IFormatProvider 的decimal.Parse的重載將允許您解析包含帶有句點的數字的字符串作為小數點符號(如果標准是您的文化中的逗號)。
您可以通過傳入適當的 IFormatProvider 對生成的小數使用 ToString 以使用逗號對其進行格式化。 CultureInfo 和 NumberFormatInfo 都實現了 IFormatProvider。
您可以使用以下代碼獲取CultureInfo的實例(此代碼用於澳大利亞的英語)。
new CultureInfo("en-AU")
另請注意,如果您期望格式不正確的字符串, decimal.TryParse是 decimal.Parse 方法的一個很好的替代方法,因為它允許您處理它們而不會引發異常。
以下代碼應為您提供所需的結果(您在其中一條評論中寫道,目標系統是 SAP,文化可能是德語(de-DE))。
var yourString = "372551.40";
var yourDecimal = decimal.Parse(yourString, CultureInfo.InvariantCulture);
var yourFormattedDecimal = yourDecimal.ToString(new CultureInfo("de-DE"));
來自 MSDN:
string value;
decimal number;
// Parse an integer with thousands separators.
value = "16,523,421";
number = Decimal.Parse(value);
Console.WriteLine("'{0}' converted to {1}.", value, number);
// Displays:
// 16,523,421' converted to 16523421.
干杯
您可以創建自定義NumberFormatInfo
:
string s = "372551.40";
var dec = decimal.Parse(s, CultureInfo.InvariantCulture);
var nfi = new CultureInfo("en-US", false).NumberFormat;
nfi.NumberGroupSeparator = ".";
nfi.NumberDecimalSeparator = ",";
var res = dec.ToString("n", nfi);
var resDecimal = decimal.Parse(res, nfi);
Output 正是您所需要的: 372.551,40
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.