可能的分数损失

Cod*_*ker 116 c# math

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

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

double returnValue = (myObject.Value / 10);
Run Code Online (Sandbox Code Playgroud)

Value是对象中的int.

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

有关为什么会这样的想法吗?

Óla*_*age 163

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

例如,将10转为10.0

double returnValue = (myObject.Value / 10.0);
Run Code Online (Sandbox Code Playgroud)


lc.*_*lc. 57

如果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;
Run Code Online (Sandbox Code Playgroud)


Cam*_*ium 7

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


pax*_*blo 7

假设myObject.Value是a int,则等式myObject.Value / 10将是整数除法,然后将其转换为double.

这意味着myObject.Value为12将导致returnValue变为1 而不是 1.2.

您需要先输出值:

double returnValue = (double)(myObject.Value) / 10.0;
Run Code Online (Sandbox Code Playgroud)

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