long a = 50000;
long b = 98600000;
我试过
float c = a/b;
decimal c =a/b;
double c = a/b;
但他们所有人总是得到0
如何获得结果(0.00507 ...)? 感谢。
答案 0 :(得分:4)
您正在long
潜水long
,这总是产生long
。您需要投射其中一个值:
float c = ((float)a)/b;
decimal c =((decimal)a)/b;
double c = ((double)a)/b;
答案 1 :(得分:1)
由于除法是在整数算术中进行的,因此得到0,而不管分配表达式的变量的类型如何。
要解决问题,您可以使用
1.0 * a / b
代表double
案例,
1.0f * a / b
表示float
个案,
1.0M * a / b
表示十进制大小写。还有其他方法,但我发现这种方法最清晰。事实上,您在条款开头看到一个文字,从一开始就向您的代码的读者发出信号,您知道自己在做什么。
M
表示C#中的decimal
字面值。 (而1.0f
表示float
字面值。)此技术会强制将a
和b
转换为适当的类型。
最后,我会避免任何涉及将long
隐式转换为float
的表达式。
答案 2 :(得分:-1)
当划分两个long
类型时,无论接收类型是long
,decimal
还是double
,您都会得到float
。
收到decimal
结果:
decimal c = (decimal)a / b;
收到float
结果:
float c = (float)a / b;
收到double
结果:
double c = a * 1.0 / b;