簡體   English   中英

如何將字符串轉換為十進制,並將其格式化為漂亮的 output?

[英]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表示的數字所在的區域性是當前系統區域性,那么您可以在不需要指定NumberStylesIFormatProvider的情況下使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM