C# 为什么要使用Double.Parse错误?

C# 为什么要使用Double.Parse错误?,c#,replace,double,comma,C#,Replace,Double,Comma,我是这个网站的新手,C# 我有一个关于浮点数和逗号的问题 dpi.Text = "1188"; winSens.Text = "1"; sens.Text = "1.25"; m_yaw.Text = "0.022"; double sensCM =(360 * 2.54) / ((Double.Parse(dpi.Text) * Double.Parse(winSens.Text) * Double.Parse(sens.Text) * Double.Parse(m_yaw.Text)));

我是这个网站的新手,C#

我有一个关于浮点数和逗号的问题

dpi.Text = "1188";
winSens.Text = "1";
sens.Text = "1.25";
m_yaw.Text = "0.022";

double sensCM =(360 * 2.54) / ((Double.Parse(dpi.Text) * Double.Parse(winSens.Text) * Double.Parse(sens.Text) * Double.Parse(m_yaw.Text)));

sensCM360.Text = sensCM.ToString();
所以计算是这样的

(360 * 2.54) / (1188 * 1 * 1.25 * 0.022)=
=914.4 / 32.67
=27.9889 
但结果不是27.9889,而是0000279889807162534

如果我一个接一个地向它们添加“replace”,使它们类似于
Double.Parse(dpi.Text.replace(“.”,“,”)


但我不明白的是,为什么它要用“,”来计算,就像我在代码中输入的2.54一样。有人能解释一下吗?

我也得到了
0.00027988980716253442
。这是因为德国(以及其他国家)的十进制分隔符是
。在美国(和其他国家)是

如果要强制点,可以使用类似于
en-US
CultureInfo.InvariantCulture

double sensVal = double.Parse(sens.Text, CultureInfo.InvariantCulture); 
// ...

这导致
1.25
而不是
125.0

我也得到
0.00027988980716253442
。这是因为德国(以及其他国家)的十进制分隔符是
。在美国(和其他国家)是

如果要强制点,可以使用类似于
en-US
CultureInfo.InvariantCulture

double sensVal = double.Parse(sens.Text, CultureInfo.InvariantCulture); 
// ...

这将导致
1.25
而不是
125.0

如果您在应用程序中进行大量解析,请尝试更改线程的区域性:

System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

dpi.Text = "1188";
winSens.Text = "1";
sens.Text = "1.25";
m_yaw.Text = "0.022";

double sensCM =(360 * 2.54) / ((Double.Parse(dpi.Text) * Double.Parse(winSens.Text) * Double.Parse(sens.Text) * Double.Parse(m_yaw.Text)));

sensCM360.Text = sensCM.ToString();
或者只是将区域性传递给double.Parse()


如果您在应用程序中执行大量解析,请尝试更改线程的区域性:

System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;

dpi.Text = "1188";
winSens.Text = "1";
sens.Text = "1.25";
m_yaw.Text = "0.022";

double sensCM =(360 * 2.54) / ((Double.Parse(dpi.Text) * Double.Parse(winSens.Text) * Double.Parse(sens.Text) * Double.Parse(m_yaw.Text)));

sensCM360.Text = sensCM.ToString();
或者只是将区域性传递给double.Parse()


这一切都是关于文化的,你不应该取代它:考虑1000000(100万),当我运行你的代码时,我得到了正确的答案。S@Brian因为你的文化有<代码> ./COD>作为小数分隔符,它是关于文化的,你不应该替换它:考虑1000000(100万),当我运行你的代码时,我得到了正确的答案。S@Brian因为您的区域性将
作为小数分隔符