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

c# Correct way to convert string value to decimal

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

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

但十进制最终值总是10146。我需要输出值的格式为 101.46 as decimal

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

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

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

我通常建议使用静态 Parse 方法而不是 Convert.ToXyz(因为它们通常更强大,并且也有 TryParse 选项),所以当您 可以将不变区域性传递给Convert.ToDecimal,我会使用:

decimal value = decimal.Parse(text, CultureInfo.InvariantCulture);
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.
}

如果函数returns为真则

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