如果这是一个天真的问题,请原谅我,但是我今天不知所措。
我有一个简单的除法计算如下:
double returnValue = (myObject.Value / 10);
值是对象中的 int。
我收到一条消息,说可能损失分数。但是,当我将这个 double 改为 int 时,消息就消失了。
知道为什么会这样吗?
我认为既然 myObject 是一个 int 类型的,那么应该这样做
double returnValue=(myObject.Value/10.0);
当你把两个 int 分割成一个浮点值时,分数部分就丢失了。如果将其中一个项强制转换为浮点数,则不会得到此错误。
举个例子,把10变成10.0
double returnValue = (myObject.Value / 10.0);
如果 myObject.Value是整数,那么就要进行整数除法,因为 /的两边都是整数类型。
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将是一个整数除法,然后将被强制转换为一个双精度。
int
myObject.Value / 10
这意味着 myObject.Value 为12,返回值将变为1,没有为1.2。
您需要首先对值进行强制转换:
double returnValue = (double)(myObject.Value) / 10.0;
这将导致正确的值1.2,至少和双精度数一样正确,因为它们有局限性,但是这在 SO 的其他地方已经讨论过了,几乎是没完没了的: ——)。