我有一个结构变量 health,可以作为 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
上面的代码是我正在使用的。我希望第二个结果输出:13230000014,但它给了我一个奇怪的负数。
最佳答案
你说你想让它打印 13230000014
,但是这个值大于 int 可以容纳的最大值,实际上是 2^31 - 1
(在大多数系统上)。您将需要停止使用 %i
说明符并切换到更大的说明符,例如 %lld
,并转换为 long long
。
像这样:
printf("The disk health in loop is: %lld\n", (long long) floor(disk_ptr->health));
请注意,您必须同时更改转换和格式说明符,否则 printf
仍会将参数视为 int。
如果您想更明确地使用 64 位整数,您可以考虑包含 stdint.h
,并转换为 int64_t
而不是 长长
。
编辑:请注意,在您的情况下,楼层调用是多余的,因为转换为 long long
会自动截断小数点。我将它留在上面的示例中以更好地匹配您的代码,但我知道这不是必需的。
关于c - C中的double到int的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31480772/