为什么我使用Double.Parse错误?

时间:2014-02-20 12:57:51

标签: 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)));

sensCM360.Text = sensCM.ToString();

所以计算就像;

(360 * 2.54) / (1188 * 1 * 1.25 * 0.022)=
=914.4 / 32.67
=27.9889 

但是我得到0,000279889807162534而不是27.9889。

如果,我逐个添加“替换”,它们就像Double.Parse(dpi.Text.Replace(".", ","))

但是我不明白为什么它与''一起工作',我记得,我们使用'。'在计算中,我在代码中输入了2.54。那么有人可以解释一下吗?

2 个答案:

答案 0 :(得分:5)

我也得到0.00027988980716253442。这是因为德国的小数分隔符,(以及其他国家/地区)。在美国(和其他国家/地区),.

如果您想将点强制为decimal separator,可以使用与CultureInfo.InvariantCulture类似的en-US

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

这导致1.25而不是125.0

答案 1 :(得分: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()

dpi.Text = "1188";
winSens.Text = "1";
sens.Text = "1.25";
m_yaw.Text = "0.022";    
double sensCM =(360 * 2.54) / ((Double.Parse(dpi.Text,CultureInfo.InvariantCulture) * Double.Parse(winSens.Text,CultureInfo.InvariantCulture) * Double.Parse(sens.Text,CultureInfo.InvariantCulture) * Double.Parse(m_yaw.Text)));

sensCM360.Text = sensCM.ToString();