从 ‘int’ 转换为 ‘float’ 可能会改变它的值

标签 c floating-point int rounding c99

我的代码:

#inlcude <math.h>
#include "draw.h"  /*int draw(int x, int y)*/

draw(rintf(10 * x), rintf(8 * y));

我收到此警告:从“float”转换为“int”可能会改变其值。

我无法将draw 更改为 float ,因为我需要它来绘制点。所以四舍五入是不可避免的。有任何想法吗?

最佳答案

rintf 的返回类型是 float,它会产生警告。您可以显式转换为 int 以抑制警告(即 (int) rintf(10 * x)),或者您可以使用另一种舍入方式(例如,如果这些值已知为非负值,(int) (10.0f * x + 0.5f)) 或 lrint(最好来自 tgmath.h),尽管它返回一个 long,这可能会导致另一个警告,具体取决于您的编译器和设置。

关于从 ‘int’ 转换为 ‘float’ 可能会改变它的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33462369/

相关文章:

c - 为什么多个线程得到相同的 "tid?"

c++ - 用于高级综合的任意精度浮点库

python - Python中小数点后的 float 加零

python - 你如何找到低于某个值的最大 float ?

c - 将指针返回到自身

c - 为什么pause返回-1并设置errno?

Java:打印 int[] 时出现奇怪的异常

c++ - 如何修复从 ascii 值到 int 的数组赋值

powershell - 如何确保一个函数只接受一个正整数?

C 二进制操作数无效