我正在尝试使用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
!我想稍后做一些计算。
答案 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进行一次修改。