如果这是一个天真的问题,请原谅我,但我今天不知所措.
我有一个简单的除法计算如下:
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)
假设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的其他地方讨论,几乎无休止地:-).