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

时间:2010-08-05 11:40:54

标签: c# double rounding

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

将返回0.0但我预计0.05

我可以/必须改变什么来获得0.05

因为此示例中的5是变量

7 个答案:

答案 0 :(得分:19)

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

double variable = 5.0/100;

如果5位于变量x(整数类型)中,请使用:

variable = (double)x/100; 

variable = ((double)x)/100;

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

variable = x/100.0;

答案 1 :(得分:4)

  

与现实世界不同,电脑会对待   数学运算有点   不同的是,尽管没有   一旦我们有显着差异   明白为什么会这样。

1。)为什么会这样?

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

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

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

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

希望这有帮助。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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;

答案 4 :(得分:1)

双变量= 5D / 100D;

答案 5 :(得分:0)

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

因为我们不知道变量的'type'是什么,所以我们必须使用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
}
现在躲在桌子底下 - 以防万一我忽略了其他显而易见的东西! :)

吉姆

答案 6 :(得分:-3)

马科,

试试这个:

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

吉姆

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

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