Reb*_*375 0 c double int type-conversion
我有一个结构变量运行状况,可以作为disk-> health访问,它是double类型.我试图将其打印为double,然后将其转换为int并再次打印.
printf("The disk health in loop is: %lf\n", disk_ptr->health);
//result is: 13230000014.560297
printf("The disk health in loop is: %i\n", (int) floor(disk_ptr->health));
//result is: -2147483648
printf("The disk health in loop is: %d\n", (int) floor(disk_ptr->health));
//result is: -2147483648
Run Code Online (Sandbox Code Playgroud)
上面的代码是我正在使用的.我希望输出第二个结果:13230000014,但它给了我一个奇怪的负数.
13230000014大于32位整数,因此int如果int是32位,则不能将其存储在32位.如果您有64位计算机,则可以尝试转换为a long而不是int.请注意,long不保证是64位.
编辑:根据评论,类型int64_t和long long保证是64位,所以你可以使用那些.
你说你想要它打印13230000014,但这个值大于int可以容纳的最大值,实际上2^31 - 1(在大多数系统上).您需要停止使用说明%i符并切换到更大的说明符,例如%lld,并转换为long long替换.
像这样:
printf("The disk health in loop is: %lld\n", (long long) floor(disk_ptr->health));
Run Code Online (Sandbox Code Playgroud)
请注意,您必须更改转换和格式说明符,或者printf仍将参数视为int.
如果你想更明确地使用64位整数,你可以考虑包括stdint.h,并进行转换int64_t而不是a long long.
编辑:请注意,在您的情况下,楼层调用是多余的,因为强制转换long long会自动截断小数.我在上面的示例中将其保留为更好地匹配您的代码,但只是知道它没有必要.