我认为关于数据类型,还有很多需要学习的地方。 为什么会发生这种情况。
double result = ((3/8)*100).ToString();
出现了零,应该是37.5... :(
我认为关于数据类型,还有很多需要学习的地方。 为什么会发生这种情况。
double result = ((3/8)*100).ToString();
出现了零,应该是37.5... :(
3/8 进行整数除法,结果为 0
double result = ((3.0/8)*100);
应该这样做。
顺便提一下,如果你执行 ((3.0/8)*100).ToString(),你会得到一个字符串而不是一个双精度浮点数。
double result = (((double)3/8)*100);
double result = ((3.0/8.0)*100);
应该这样做。你正在执行整数除法,而不是浮点数除法。
数字3和8都是整数,因此3/8 = 0。
使用:
string result = ((3d/8d)*100d).ToString();
你的表达式仅涉及整数,而3/8为0。
如果你想要一个浮点数表达式,至少一个元素必须是浮点数。
最简单的解决方案如下:
double result = (100.0 * 3/8)
3和8都是整数,因此3/8的结果也是整数,除非你以不同的方式进行转换。
所以,3/8 = 0。
独角兽拿走了数字3,并用0替换了它。
如果这是一个真正的问题... 3/8向下取整为0。0 * 100 = 0。
因为使用了整数运算,而不是浮点数运算。
您写的是((3/8)*100)
,但该表达式中的常量都没有非整数类型。因此编译器(正确地)将其解释为整数运算。由于3/8小于1,所以该表达式的值为0。
一个简单的解决方法是改为写((3./8.)*100.)
。实际上,使3或8中的任何一个成为浮点值就足够了,因为混合类型表达式的规则。
你的除法中的3和8是整数字面量,因此执行整数除法,3/8的结果为零。如果你将它们替换为3.0和8.0,或者使用适当的数据类型后缀(你没有说明你使用的是哪种编程语言),那么计算就会正常工作。