c#将字符串值转换为十进制的正确方法

时间:2017-11-17 15:33:11

标签: c# type-conversion decimalformat

我需要将“101.46”格式的任何值转换为十进制

string s = "101.46";
decimal value = Convert.ToDecimal(s);

但小数最终值始终为 10146 。我需要输出值的格式为 101.46作为十进制

3 个答案:

答案 0 :(得分:6)

Convert.ToDecimal将使用当前正在执行的线程的文化 - 我的猜测是,在您的情况下,这是一种使用,作为小数分隔符而不是.的文化。您只需要指定正确的文化 - 通常是invariant culture - 这几乎总是适用于任何旨在机器可读的字符串的文化。 (你也应该使用不变文化来创建这样的字符串。)

我通常建议在Convert.ToXyz上使用静态Parse方法(因为它们通常更有能力,并且也有TryParse个选项),所以当你可以将不变文化传递给Convert.ToDecimal,我会使用:

decimal value = decimal.Parse(text, CultureInfo.InvariantCulture);

答案 1 :(得分:1)

您当前的文化似乎使用,作为小数点分隔符,然后您可以使用:

decimal value = decimal.Parse(s, CultureInfo.InvariantCulture);

答案 2 :(得分:-1)

public static boolean isNumeric(String str)  
{  
  try  
  {  
    decimal d = decimal.parseDouble(str);  
  }  
  catch(NumberFormatException nfe)  
  {  
    return false;  
  }  
  return true;  
}

如果您想使用正则表达式,可以使用如下,

public static boolean isNumeric(String str)
{
  return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.
}

如果函数返回true,则

if(isNumeric(Yourvalue)){
  decimal value = decimal.Parse(s, CultureInfo.InvariantCulture);
}