C# 可能的分数损失

C# 可能的分数损失,c#,math,C#,Math,如果这是一个幼稚的问题,请原谅我,然而我今天不知所措 我有一个简单的除法计算,如下所示: double returnValue = (myObject.Value / 10); 值是对象中的整数 我收到一条消息说可能会丢失分数。但是,当我将double改为int时,消息就消失了 有没有想过为什么会发生这种情况?我认为既然myObject是一个int,您应该 double returnValue=(myObject.Value/10.0); 当您将两个整数除以一个浮点值时,分数部分将丢失。如

如果这是一个幼稚的问题,请原谅我,然而我今天不知所措

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

double returnValue = (myObject.Value / 10);
值是对象中的整数

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


有没有想过为什么会发生这种情况?

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

double returnValue=(myObject.Value/10.0); 

当您将两个整数除以一个浮点值时,分数部分将丢失。如果将其中一项强制转换为浮点,则不会出现此错误

例如,把10变成10.0

double returnValue = (myObject.Value / 10.0);

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

要进行浮点除法,表达式中的一个数字必须是浮点类型。如果myObject.Value为双精度或以下任一值,则为真:

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;

整数除以整数将返回整数。将值转换为双精度或除以10.0。

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

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

您需要首先强制转换值:


这将导致正确的值1.2,鉴于其局限性,至少与双倍允许的值一样正确,但这在其他地方讨论过,几乎是无休止的:-)。

感谢大家的精彩回复。现在,当除以2个整数值时,小数点丢失是有意义的。
double returnValue = (double)(myObject.Value) / 10.0;