我需要将格式"101.46">的任何值转换为十进制。
string s = "101.46";
decimal value = Convert.ToDecimal(s);
但十进制最终值始终为 10146。我需要输出值的格式为 101.46 作为十进制
Convert.ToDecimal
将使用当前正在执行的线程的区域性 - 我的猜测是,在您的情况下,这是一种使用 ,
作为小数分隔符而不是 .
的区域性。只需指定正确的区域性(通常是固定区域性(,这几乎总是用于任何旨在供机器读取的字符串的正确区域性。(也应使用固定区域性来创建此类字符串。
我通常建议使用静态Parse
方法而不是Convert.ToXyz
(因为它们通常功能更强大,并且也有TryParse
选项(,因此,虽然您可以将固定区域性传递给Convert.ToDecimal
,但我会使用:
decimal value = decimal.Parse(text, CultureInfo.InvariantCulture);
您当前的区域性似乎使用 ,
作为小数分隔符,那么您可以使用:
decimal value = decimal.Parse(s, 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.
}
如果函数返回 true,则
if(isNumeric(Yourvalue)){
decimal value = decimal.Parse(s, CultureInfo.InvariantCulture);
}