c - C中的double到int的转换

标签 c int type-conversion double

我有一个结构变量 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/

相关文章:

java - java如何从字符串中解析int?

java - 从不同的 .txt 文件获取 INT 并将它们加在一起

java - Java中从字符串到sql日期的日期转换给出不同的输出?

java - Char 到 Int 转换 Java

c - 有没有一种标准的方法来重建降低的结构函数参数?

c - 为c中的指针结构成员赋值

c - 如何在C程序中找到线上的偶数

android - 从十六进制字符串到有符号整数

java - Socket在同一台机器上的两个进程(起源于C和Java)之间进行通信

不使用强制转换运算符比较 unsigned int 和 int