簡體   English   中英

將字符串解析為十進制、逗號和句點

[英]Parse string to decimal, commas and periods

如何將字符串解析為十進制,以便它適用於兩種格式 - 帶逗號和句點?

[Fact]
public void foo(){
  var a="1,1";
  var b="1.1";
  Assert.Equal(Parse(a),Parse(b));
}
private decimal Parse(string s){
  return decimal.Parse(s,NumberStyles.Any,
    CultureInfo.InvariantCulture);
}

output:

Test 'Unit.Sandbox.foo' failed: Assert.Equal() Failure
Expected: 11
Actual:   1,1

你可以試試:

private decimal Parse(string s){
  s = s.Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator);
  return decimal.Parse(s,NumberStyles.Any,
    CultureInfo.InvariantCulture);
}

這個怎么樣?

private static decimal Parse(string s)
    {
        s = s.Replace(",", ".");
        return decimal.Parse(s);
    }

您應該通過在解析逗號十進制字符串之前將貨幣小數分隔符修改為逗號來獲得所需的結果。 這里有一些食物資源:

http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.currencydecimalseparator.aspx#Y888

您也可以按照此處討論的方式實現自己的 Iformatprovider:

http://msdn.microsoft.com/en-us/library/t7xswkc6.aspx http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx

哦,或者你可以做一個骯臟的黑客,簡單地在“,”上用“。”運行字符串替換;)

如果您有英語操作系統,此方法會將帶逗號的十進制數轉換為點。 如果您有俄語,該方法會將帶點的十進制數轉換為逗號。

Console.Write("Input number: ");
string? input = Console.ReadLine();
decimal number = ConvertNumberToCurrentLocale(input);
Console.WriteLine("Result: " + number);

decimal ConvertNumberToCurrentLocale(string? input)
{
    string separator = Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator;
    switch (separator)
    {
        case ".":
            input = input?.Replace(",", ".");
            break;
        case ",":
            input = input?.Replace(".", ",");
            break;
    }
    decimal.TryParse(input, out var number);
    return number;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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