为什么返回C#Convert.ToDouble(5/100)0.0而不是0.05

double variable = Convert.ToDouble(5/100); 

将返回0.0但我预计0.05

什么可以/必须改变得到0.05

因为这个例子中的5是一个变量

5/100以整数运算完成,转换产生0。 尝试

 double variable = 5.0/100; 

如果5在变量x (整数类型)中,则使用:

 variable = (double)x/100; 

要么

 variable = ((double)x)/100; 

使意图明确(感谢约翰!)

要么

 variable = x/100.0; 

与现实世界不同,计算机对数学运算的处理方式略有不同,但一旦我们理解了它的行为,就没有显着差异。

1.)为什么它表现得像这样?

请注意,整数是整数,整数类型的变量只能存储整数 ,不能存储或识别十进制数。 当你说5/100时,5和100都是计算机的整数文字,它被称为整数除法 。 结果应该是0.05,但由于这是一个整数除法,结果也将是整数 ,正如我所说的整数不能存储小数点值, 后面的部分是“。”。 (小数点)被完全忽略,因此结果为0

添加更多内容,虽然您将结果转换为double,但它没有任何区别,因为在它实际转换为double之前,结果已经为0并且它恰好将整数0转换为double,最终导致0.0

2.)如何获得所需的输出?

其他答案很好地解释了解决方案,所以我请求您参考这些答案,而不是为您重新发明轮子。

希望这可以帮助。

因为整数除法中的5/100是0.你需要确保你在双打上进行除法。

5/100是整数运算。 为了具有双精度,一个或多个值需要加倍。

 double result = 5.0/100.0; double result = 5.0/100; double result = 5/100.0; double result = (double)5/100; double result = 5/(double)100; 

要么

 double numerator = 5; double denominator = 100; double result = numerator / denominator; 

双变量= 5D / 100D;

所以这将是我修改后的“考虑”答案……

因为我们不知道变量的“类型”是作为分子到达的,所以我们必须使用Double.TryParse。 在实验室里,我们可以做这样的事情:

 var numerator = "5"; // let's make it string to prove the point double parsedNumerator; int denominator = 100; // this could well be a constant double result; if(Double.TryParse(numerator, out parsedNumerator)) { // notice no casting or convert fluff result = parsedNumerator/denominator; // do something with the result } else { // warn that the numerator is doo-lallie } 

现在藏在桌子底下 – 以防万一我忽略了其他明显的东西! 🙂

吉姆

马可,

试试这个:

 double variable = Convert.ToDouble((double)5/100); 

吉姆

[已编辑] – 正如所指出的(由沉默的选民:) :)转换的使用是多余的。 显然应该以类似于其他条目的方式完成。 我承认这一点,但请将其留在上面作为一个例子,说明如何在赶时回答问题时快速投票…请谨慎对待您的主人!

另外,由于我们不知道变量是来自字符串还是数字,因此在进行算术运算之前,他还应该考虑数字1上的tryparse等。