可能的分数损失

如果这是一个天真的问题,请原谅我,但是我今天不知所措。

我有一个简单的除法计算如下:

double returnValue = (myObject.Value / 10);

值是对象中的 int。

我收到一条消息,说可能损失分数。但是,当我将这个 double 改为 int 时,消息就消失了。

知道为什么会这样吗?

51160 次浏览

我认为既然 myObject 是一个 int 类型的,那么应该这样做

double returnValue=(myObject.Value/10.0);

当你把两个 int 分割成一个浮点值时,分数部分就丢失了。如果将其中一个项强制转换为浮点数,则不会得到此错误。

举个例子,把10变成10.0

double returnValue = (myObject.Value / 10.0);

如果 myObject.Value是整数,那么就要进行整数除法,因为 /的两边都是整数类型。

要进行浮点除法,表达式中的一个数字必须是浮点类型的。如果 myObject。值是双精度的,或者是以下任何一项:

double returnValue = myObject.Value / 10.0;
double returnValue = myObject.Value / 10d; //"d" is the double suffix
double returnValue = (double)myObject.Value / 10;
double returnValue = myObject.Value / (double)10;

一个整数除以一个整数将返回一个整数。将 Value 设置为 double 或除以10.0。

假设 myObject.Value是一个 int,方程 myObject.Value / 10将是一个整数除法,然后将被强制转换为一个双精度。

这意味着 myObject.Value 为12,返回值将变为1,没有为1.2。

您需要首先对值进行强制转换:

double returnValue = (double)(myObject.Value) / 10.0;

这将导致正确的值1.2,至少和双精度数一样正确,因为它们有局限性,但是这在 SO 的其他地方已经讨论过了,几乎是没完没了的: ——)。