可能的分数损失

时间:2009-06-30 01:21:51

标签: c# math

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

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

double returnValue = (myObject.Value / 10);

Value是对象中的int。

我收到一条消息,说明可能的分数损失。但是,当我将double更改为int时,消息就会消失。

有关为何会发生这种情况的任何想法?

5 个答案:

答案 0 :(得分:159)

当将两个int分成浮点值时,小数部分会丢失。如果将其中一个项目转换为浮点数,则不会出现此错误。

例如,将10变为10.0

double returnValue = (myObject.Value / 10.0);

答案 1 :(得分:56)

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

要进行浮点除法,表达式中的一个数字必须是浮点类型。如果myObject.Value是double或以下任何一个,那将是真的:

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;

答案 2 :(得分:7)

假设myObject.Valueint,等式myObject.Value / 10将是一个整数除法,然后将其转换为双精度。

这意味着myObject.Value为12将导致returnValue变为1, 1.2。

您需要先输出值:

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

这将导致正确的值1.2,至少正如双打允许的那样正确,但是在SO的其他地方讨论过,几乎无休止地: - )。

答案 3 :(得分:6)

整数除以整数将返回一个整数。将值转换为double或除以10.0。

答案 4 :(得分:4)

我认为既然myObject是一个int,你应该

double returnValue=(myObject.Value/10.0);