如果这是一个天真的问题,请原谅我,但我今天不知所措。
我有一个简单的除法计算如下:
double returnValue = (myObject.Value / 10);
Value是对象中的int。
我收到一条消息,说明可能的分数损失。但是,当我将double更改为int时,消息就会消失。
有关为何会发生这种情况的任何想法?
答案 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.Value
是int
,等式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);