我认为我有很多东西要学习数据类型。 为什么会发生这种情况
double result = ((3/8)*100).ToString();
它给零..应该是37,5 ...... :(
答案 0 :(得分:12)
3/8执行整数除法,结果为0
double result = ((3.0/8)*100);
应该这样做。
顺便说一下,如果你这样做((3.0 / 8)* 100).ToString()你得到一个字符串而不是一个双字符。
答案 1 :(得分:4)
您需要说服编译器执行浮点除法:
double result = (((double)3/8)*100);
否则它执行整数除法,然后3/8为零。
答案 2 :(得分:4)
double result = ((3.0/8.0)*100);
应该这样做。你正在执行整数除法,而不是浮点除法。
答案 3 :(得分:2)
你的表达式只涉及整数,而3/8是0。
如果需要浮点表达式,则表达式的至少一个元素必须是浮点数。
最简单的解决方案如下:
double result = (100.0 * 3/8)
请注意,我首先考虑了百分因子,因为它有助于在分割之前进行乘法运算具有更好的精度。
另外,toString()很奇怪??
答案 4 :(得分:1)
3和8是整数,因此3/8 = 0。
使用:
string result = ((3d/8d)*100d).ToString();
答案 5 :(得分:1)
整数除法(3/8)得到0.如果你想使用浮点值,那么要清楚你的编程语言(3.0 / 8.0或3f / 8f或3d / 8d或你的语言允许的其他内容)
答案 6 :(得分:1)
3& 8是整数,因此3/8的结果也是一个整数,除非你以不同的方式进行转换。
所以,3/8 = 0。
答案 7 :(得分:1)
独角兽拿走了3并取而代之的是0。
关于这是一个真实问题的概率...... 3/8向下舍入到0. 0 * 100 = 0.
答案 8 :(得分:1)
因为使用了整数数学,而不是浮点数。
您编写了((3/8)*100)
但该表达式中没有常量具有非整数类型。因此编译器(正确地)将其解释为整数运算。由于3/8小于1,表达式的计算结果为0。
一个简单的解决方法是改为编写((3./8.)*100.)
。实际上,由于混合类型表达式的规则,使3或8中的任何一个成为浮点值就足够了。
答案 9 :(得分:0)
答案 10 :(得分:0)
3/8 = 0
3.0 / 8.0 = 0.375