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);
}
我需要将 "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);
}