字符串到十进制使用扩展方法

时间:2016-09-15 10:24:40

标签: c#

我的字符串是1799.00

我想这样:1.799,00

但我无法转换此方法。

我正在使用此功能。

public static decimal ToDecimal(this object str)
{
    if (str != null)
    {
        try
        {
            return Convert.ToDecimal(str, new CultureInfo("tr-TR"));
        }
        catch (Exception)
        {
            return 0;
        }
    }
    else
    {
        return 0;
    }
}

3 个答案:

答案 0 :(得分:3)

您可能正在寻找不断变化的格式。给定一个小数作为不变文化表示("1799.00")中的字符串,你需要一个字符串,但在土耳其文化表示中:("1.799,00"

  // you want to return string in Turkish culture, right?
  public static string ToTuskishDecimal(this object value) {
    if (null == value)
      return null; // or throw exception, or return "0,00" or return "?"

    try {
      return Convert
       .ToDecimal(value, CultureInfo.InvariantCulture)
       .ToString("N", CultureInfo.GetCultureInfo("tr-TR")); 
    }
    catch (FormatException) {
      return "0,00"; // or "?"
    } 
  }

测试:

 decimal d = 1799.00m;
 string s = d.ToString(CultureInfo.InvariantCulture);

 // 1.799,00
 Console.Write(d.ToTuskishDecimal());
 // 1.799,00
 Console.Write(s.ToTuskishDecimal());

如果您想要退回decimal,则必须在打印时手动格式化

 public static decimal ToDecimal(this object value) {
   if (null == value)
     return 0.00m;

   try {
     return Convert.ToDecimal(value, CultureInfo.InvariantCulture);
   }
   catch (FormatException) {
     return 0.00m; 
   } 
 }

...

 // return me a decimal, please
 decimal d = "1799.00".ToDecimal();
 // when printing decimal, use Turkish culture
 Console.Write(d.ToString("N", CultureInfo.GetCultureInfo("tr-TR")));

您可以将土耳其文化指定为整个帖子的默认文化:

 Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("tr-TR");
 ...
 // now you don't have to mention Turkish culture
 // ...but still have to specify the format
 Console.Write(d.ToString("N"));

答案 1 :(得分:1)

我用它来获取十进制值:

public static decimal toDecimal( string s ) {
    decimal res = 0;
    decimal.TryParse(s.Replace('.', ','), out res);
    return res;
}

如果您想在所要求的格式上显示小数值,请尝试以下方法:

toDecimal("1700.99").ToString("N2") 

您将获得“1.700,99”字符串。

答案 2 :(得分:1)

我写了另一个简单的例子来获取土耳其语格式的十进制值:

decimal value = 1700.00m;
Console.WriteLine(value.ToString("N", CultureInfo.GetCultureInfo("tr-TR")));