当 double 数具有“精确”整数值时,如下所示:
double x = 1.0;
double y = 123123;
double z = -4.000000;
通过(int)x,(int)y,(int)z转换为整数类型时,是否可以保证将其正确舍入为1、123123和-4? (并且不要截断为0、123122或-5 b/c的浮点怪异度)。我根据this page(这是关于lua中的fp,默认情况下,其数字类型仅以 double 形式表示的语言)询问b/c,并讨论了根据IEEE 754,具有 double 形式的整数运算如何精确,但是我不确定如果在调用带有整数类型参数的C函数时,我需要担心手动舍入 double 数,或者当 double 数具有精确的整数值时要小心。
最佳答案
是的,如果整数值适合int
。double
可能代表超出int
类型范围的整数值。例如,如果您的123123.0
类型只有16位,则无法将int
转换为int
。
也不能保证double
可以代表特定类型可以代表的每个值。 IEEE 754的尾数使用52或53位。如果您的long
具有64位,则将非常大的long
转换为double
并返回可能不会提供相同的值。
关于c - 当将具有整数值的 double 数转换为整数时,是否可以保证做到 'properly'?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10939605/