如何通过长除法运算获得小数

时间:2017-05-11 15:40:27

标签: c#

long a = 50000;
long b = 98600000;

我试过

float c = a/b;
decimal c =a/b;
double c = a/b;

但他们所有人总是得到0

如何获得结果(0.00507 ...)? 感谢。

3 个答案:

答案 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字面值。)此技术会强制将ab转换为适当的类型。

最后,我会避免任何涉及将long隐式转换为float的表达式。

答案 2 :(得分:-1)

当划分两个long类型时,无论接收类型是longdecimal还是double,您都会得到float

收到decimal结果:

decimal c = (decimal)a / b;

收到float结果:

float c = (float)a / b;

收到double结果:

double c = a * 1.0 / b;