可能丢失分数


119

如果这是一个天真的问题,请原谅我,但是我今天茫然了。

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

double returnValue = (myObject.Value / 10);

值是对象中的int。

我收到一条消息,提示可能丢失分数。但是,当我将double更改为int时,消息消失了。

关于为什么会发生这种情况有任何想法吗?


谢谢大家的好评。现在,将2个int值相除会丢失小数点,这很有意义。
2009年

Answers:


168

当您将两个int划分为浮点值时,分数部分将丢失。如果将其中一项投向float,则不会出现此错误。

例如将10变成10.0

double returnValue = (myObject.Value / 10.0);

57

如果myObject.Valueis是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;

7

整数除以整数将返回您的整数。将Value强制转换为两倍或除以10.0。


7

假设myObject.Value为an int,则方程myObject.Value / 10将是一个整数除法,然后将其转换为双精度型。

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

您需要先强制转换值:

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

这将导致正确的值1.2,至少在给定限制的情况下两倍会正确,但是在SO的其他地方几乎无休止地讨论了这一点:-)。


4

我认为既然myObject是一个int,所以您应该

double returnValue=(myObject.Value/10.0); 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.