我需要将“101.46”格式的任何值转换为十进制。
string s = "101.46";
decimal value = Convert.ToDecimal(s);
但小数最终值始终为 10146 。我需要输出值的格式为 101.46作为十进制
答案 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.
}
if(isNumeric(Yourvalue)){
decimal value = decimal.Parse(s, CultureInfo.InvariantCulture);
}