double variable = Convert.ToDouble(5/100);
返回0.0,但我预计0.05为什么返回C#Convert.ToDouble(5/100)0.0,而不是0.05
可以/我必须改变什么得到0.05
因为5本例如是一个变量
double variable = Convert.ToDouble(5/100);
返回0.0,但我预计0.05为什么返回C#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无用的转换。 – 2010-08-05 11:43:58
我解开我的downvote,因为你添加了一个正确的例子,但是你仍然有一个糟糕的例子,在已经* double的表达式上使用'Convert.ToDouble'。为什么? – 2010-08-05 11:50:01
@Ben:谢谢,修复(我很匆忙,对不起) – 2010-08-05 11:50:05
马可,
试试这个:
double variable = Convert.ToDouble((double)5/100);
吉姆
[后期编辑] - 正如指出的(由沉默选民:)) Convert的使用是重复的。显然应该以与其他条目类似的方式完成。我承认,但在上面留下它作为快速回答问题时迅速得到满足的示例......请谨慎成为您的主人!因为我们不知道变量是来自一个字符串还是一个数字,所以在做算术之前,他还应该在数字1上考虑tryparse等等。
无用的使用'Convert',并且不明显(铸造优先于划分,还是先划分完成?) – 2010-08-05 11:46:12
Ben - 感谢downvote :-)。我正在回答他的问题,并提供符合HIS预期要求的答案。没有更多,没有更多.. – 2010-08-05 11:47:24
所有的1111's - 腿11:0 – 2010-08-05 11:50:01
因为整数除法中的5/100为0.您需要确保您正在对双打进行除法。
双变量= 5D/100D;
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;
不同于现实世界,计算机处理 数学运算有点 不同,虽然没有 显著差异,一旦我们 明白为什么它的行为这样。
1.)为什么它的行为如此?
请注意,整数是整数,类型的变量只能存储整数,并且不能存储或识别十进制数。当你说5/100时,5和100都是计算机的整数文字,它被称为整数除法。结果应该是0.05但是,因为这是一个整数除法,结果也将是整数,正如我所说的整数不能存储小数点值,在“。”之后的尾部部分为。 (小数点)被完全忽略,因此结果为0。
此外,虽然您将结果转换为双倍,但它没有任何区别,因为在它实际转换为double之前结果已经为0,并且它恰好将整数0转换为double最终结果为0.0。
2.)如何获得您想要的输出?
其他答案很好地解释了解决方案,所以我恳请您参考这些答案,而不是为您重新设计轮子。
希望这会有所帮助。
所以这里将是我的修订后的“考虑”的答案...
,因为我们不知道变量是什么“类型”是为到达分子,我们不得不使用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
我们可以看到你的代码的更大一部分,对我来说它的工作原理。 – Bobby 2010-08-05 11:43:09