我正在尝试更正MISRA违规“441-Float cast to non Float”,该违规发生在以下代码中:
tULong frames = (tULong)(runTimeSeconds * 40.0f);
runTimeSeconds
是afloat
,显然40.0f
被指定为afloat
。有什么想法吗? 最佳答案
<math.h>
有一个很好的函数家族,可以在一个调用中循环和转换。不需要将转换从float
转换为tULong
。下面有一个(tULong)
强制转换来处理整数到整数的转换,该转换可能会根据范围和tULong
详细信息的未登录问题而消除。
#include <math.h>
// long int lrintf(float x);
// long long int llrint(double x);
// 4 others
tULong frames = (tULong) llrintf(runTimeSeconds * 40.0f);
这种循环而不是像OP的原始代码那样截断。