解析C中超过10位数的数字

时间:2014-07-29 03:56:59

标签: c

我正在尝试使用C作为语言来计算UPC代码,但我现在遇到了精度问题。我试过int,float,long long等等。

以下是代码:

#include <stdio.h>

int main(void)
{
    float upc;

    printf("Enter UPC:\n");
    scanf ("%d", &upc);
    printf("upc = %f ", upc);
}

结果是:

Enter UPC code:
123456789012
upc = 123456790528.000000 d= 1
Process returned 30 (0x1E)   execution time : 6.672 s
Press any key to continue.

如何按原样显示号码?它只有12位数。 我正在使用CodeBlocks,是否有可以更好地处理这个问题的IDE?

注意:请不要告诉我只使用char!我想稍后做一些计算。

3 个答案:

答案 0 :(得分:4)

通用产品代码不受整数算术运算的影响,因此使用int表示它们并不完全有意义。每个数字都分配了一个particular meaning,因此字符串更有意义。

如果您真的只想要一个创可贴,来自uint64_t的{​​{1}}将始终能够保留一个12位数字。但是,不要使用浮点类型,因为它们不是为了保持精确的整数,而是为了逼近实数。

<stdint.h>uint64_t使用printf的正确方法是使用scanf中的固定宽度格式说明符:

<inttypes.h>

答案 1 :(得分:2)

float通常只能存储6-7个十进制数字。 32位int可以存储9位数(如果前导数字为3或更小,则为10位)。要存储12位整数,您需要使用long long(最多18位)或double(最多15-16位),但double是不太可取。

因此:

#include <stdio.h>

int main(void)
{
    long long upc;

    printf("Enter UPC:\n");
    scanf ("%lld", &upc);
    printf("upc = %lld\n", upc);
    return(0);
}

答案 2 :(得分:0)

实际上你可以更清楚你想要的输出吗?我建议您使用long long int而不是float进行一次修改。