当 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 的 float )。我根据this page询问b/c (这是关于 lua 中的 fp,一种默认情况下只有 double 作为其数字类型的语言),根据 IEEE 754 讨论了 double 的整数运算是如何精确的,但我不确定在调用 C 函数时是否整数类型参数,我需要担心手动舍入 double ,或者当 double 具有精确的整数值时会处理。
最佳答案
是的,如果整数值适合 int
。
double
可以表示超出您的 int
类型范围的整数值。例如,如果您的 int
类型只有 16 位,则 123123.0
无法转换为 int
。
也不能保证 double
可以表示特定类型可以表示的每个值。 IEEE 754 使用类似 52 或 53 位的尾数。如果您的 long
有 64 位,那么将非常大的 long
转换为 double
并返回可能不会得到相同的值。
关于c - 将具有整数值的 double 值转换为整数时,是否保证执行 'properly' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10939605/