2010-08-05 38 views

回答

18

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

double variable = 5.0/100; 

如果5在可变x(整数类型),然后使用:

variable = (double)x/100; 

variable = ((double)x)/100; 

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

variable = x/100.0; 
+3

-1无用的转换。 – 2010-08-05 11:43:58

+2

我解开我的downvote,因为你添加了一个正确的例子,但是你仍然有一个糟糕的例子,在已经* double的表达式上使用'Convert.ToDouble'。为什么? – 2010-08-05 11:50:01

+1

@Ben:谢谢,修复(我很匆忙,对不起) – 2010-08-05 11:50:05

-3

马可,

试试这个:

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

吉姆

[后期编辑] - 正如指出的(由沉默选民:)) Convert的使用是重复的。显然应该以与其他条目类似的方式完成。我承认,但在上面留下它作为快速回答问题时迅速得到满足的示例......请谨慎成为您的主人!因为我们不知道变量是来自一个字符串还是一个数字,所以在做算术之前,他还应该在数字1上考虑tryparse等等。

+2

无用的使用'Convert',并且不明显(铸造优先于划分,还是先划分完成?) – 2010-08-05 11:46:12

+0

Ben - 感谢downvote :-)。我正在回答他的问题,并提供符合HIS预期要求的答案。没有更多,没有更多.. – 2010-08-05 11:47:24

+0

所有的1111's - 腿11:0 – 2010-08-05 11:50:01

2

因为整数除法中的5/100为0.您需要确保您正在对双打进行除法。

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.)为什么它的行为如此?

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

此外,虽然您将结果转换为双倍,但它没有任何区别,因为在它实际转换为double之前结果已经为0,并且它恰好将整数0转换为double最终结果为0.0

2.)如何获得您想要的输出?

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

希望这会有所帮助。

0

所以这里将是我的修订后的“考虑”的答案...

,因为我们不知道变量是什么“类型”是为到达分子,我们不得不使用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 
} 

现在躲在桌子底下 - 以防万一我已经忽略了别的东西明显! :)

jim

相关问题