Convert.ToDouble中忽略小数点

时间:2016-05-26 13:12:20

标签: c# visual-studio double

在C#visual studio中,读取后不取小数点后使用

转换为double
Convert.ToDouble(Console.ReadLine()); 

命令...例如,如果键入12.25,则会将值保存为1225。我能得到任何帮助吗? 这是我使用的代码。

double number;
Console.WriteLine("Enter a number with a two decimal places!");
number = Convert.ToDouble(Console.ReadLine());
Console.WriteLine(number):
Console.ReadLine();

3 个答案:

答案 0 :(得分:4)

当您的本地文化没有使用.作为小数分隔符时,它将无法正常工作。 如果要输入带有.小数分隔符的双精度数,则需要指定一个使用它的文化。

Convert.ToDouble(yourString, System.Globalization.CultureInfo.InvariantCulture)

如果您想以相同的格式输出,请再次使用相同的CultureInfo

CultureInfo culture = CultureInfo.InvariantCulture;
double input = Convert.ToDouble(Console.ReadLine(), culture);
Console.WriteLine(String.Format(culture, "{0}", input));

答案 1 :(得分:1)

您当前的代码应按预期工作,如果不是,则可能是文化问题导致您的双字符串格式不同(即12,25而不是12.25 )。

解析时应用当前文化

您可以通过System.Globalization命名空间在Convert.ToDouble()方法中解析值时应用当前区域性来处理此问题:

// This would use the current culture to handle reading your value
double input = Convert.ToDouble(Console.ReadLine(),CultureInfo.InvariantCulture);

处理各种文化(即句号或逗号)

如果您希望处理句号或逗号,您可能会以相同的方式执行替换:

// Get the number separator for this culture and replace any others with it
var separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
// Replace any periods or commas with the current culture separator and parse
var input = Double.Parse(Regex.Replace(Console.ReadLine(),"[.,]",separator));

你可以see a working example of this here

答案 2 :(得分:0)

这可能是某种文化使用的全球化问题,而不是。分隔小数位。希望它能解决你的问题。

string userInput = Console.ReadLine();
double inputInDouble = Convert.ToDouble(userInput,System.Globalization.CultureInfo.InvariantCulture);