除以0而不是浮点数

时间:2009-05-24 22:17:56

标签: c#

当我发现我的代码不能正常工作时,我感到非常惊讶所以我创建了一个控制台应用程序来查看问题所在,当我看到下面的代码返回0时我更加惊讶

    static void Main(string[] args)
    {
        float test = 140 / 1058;
        Console.WriteLine(test);
        Console.ReadLine();
    }

我正在尝试以%显示结果并将其放入我的应用程序中的进度(意味着(140/1058)* 100)栏,第二个值(1058)实际上是我的应用程序中的ulong类型,但是似乎不是问题。

问题是 - 问题出在哪里?

4 个答案:

答案 0 :(得分:8)

您正在使用整数运算,然后将结果转换为浮点数。改为使用浮点运算:

float test = 140f / 1058f;

答案 1 :(得分:4)

问题是你要分割整数而不是浮点数。只有结果才是浮动。将代码更改为以下

float test = 140f / 1058f;

修改

John提到有一个ulong类型的变量。如果是这种情况,那么只需使用演员操作

ulong value = GetTheValue();
float test = 140f / ((float)value);

注意,因为你从ulong到float,所以可能会失去精度。

答案 2 :(得分:3)

这将按照你期望的方式运作......

float test = (float)140 / (float)1058;

顺便说一下,你的代码对我来说很好(打印0.1323251到控制台)。

答案 3 :(得分:2)

正在执行的除法是整数除法。取代

float test = 140 / 1058;

float test = 140f / 1058; 

强制浮点除法。

一般来说,如果你有

int x;
int y;

并希望执行浮点除法,然后您必须将xy投射到浮点数中,如

float f = ((float) x) / y;