【发布时间】:2012-03-27 12:14:36
【问题描述】:
示例代码:
int main() {
float f = 123.542;
int i = (int)f;
printf("%d\n",i);
}
【问题讨论】:
-
如果号码是
1.999999999999怎么办?提示:您尝试做的事情是不可能的。 (或者至少用二进制浮点定义不好) -
也许您想要的是在接近零的某个部分的左侧获得尽可能多的浮点数(具有一定的容差)?
-
@Mysticial:浮点数实际上总是可能的,因为 FP 指数是 2 的幂。结果通常不是你想要的(例如,它只适用于精确二进制分数)。
-
假设 32 位 IEEE 浮点数,您示例中 f 的精确十进制值将是 123.54199981689453125。这不是 printf 将打印的内容,因为它使用启发式方法打印最短的表示,如果将其解析回浮点数,则会为您提供完全相同的浮点数。我提到这一点是为了指出其他人是正确的,您的问题可能不够完善,无法提供好的答案。
标签: c floating-point type-conversion floating-point-precision