为 double 提供输入 22222222222222222 但输出为 22222222222222224.000000 为什么?

Giving input 22222222222222222 for double but the output is 22222222222222224.000000 Why?

#include <stdio.h>
int main()
{
    printf("Enter the number:");
    double num;
    scanf("%lf",&num);
    printf("%lf\n",num);
}

输入:22222222222222222
Output:22222222222222224.000000
为什么它给出的输出与给定的不一样。

long double 通常在 x86 extended precision format 中实现。它的小数部分有 63 位,并且有 大约 18 个有效数字。您的号码有 17 位长,而发生的情况是该号码太大而无法精确存储在可用的 63 位中。

如果它总是一个整数(没有小数部分),那么考虑使用 "long long" 来表示这个数字。