用C打印一个非常大的整数

时间:2012-04-26 16:12:27

标签: c

我在浮点变量中存储了一个非常大的数字,但是当我打印它时,我想只显示整数部分而不是小数点后面的任何内容。

对于int或long范围内的数字,我会进行一次转换,但这对我没有帮助,因为我要打印的数字对于int或long来说太长了。

我看过这个解释:http://www.cprogramming.com/tutorial/printf-format-strings.html但我没有成功解决这个问题。

这是我的代码和我尝试进行投射:

double sum=552074001368;
long long_sum;
long_sum = (long)(sum);      //int casting for double "add" 
if(sum>=0) printf("=\n%ld\n",long_sum);
else printf("=\n%ld\n",-long_sum);

我不想使用像printf("%15f")这样的特定精度,因为这个变量会波动,有时非常短,就像4位数一样。

5 个答案:

答案 0 :(得分:6)

使用精确修饰符.0并打印数字的floor

printf("%.0f\n", floor(sum));

(或floor的{​​{1}},如果您只想要幅度,就像您的示例代码一样。)

答案 1 :(得分:5)

我认为你所追求的是%.0f。例如:

#include <stdio.h>

int main(){

    double x = 1234.567;

    printf("%.0f", x);
    return 0;
}

...打印:

1235

答案 2 :(得分:0)

你为什么要长时间投射?使用printf格式说明符来控制打印的字符数和数量。 http://www.cplusplus.com/reference/clibrary/cstdio/printf/

请记住,宽度和精度都可以由变量指定,并且不必在编译时知道:

printf("=\n%.*lf\n", 4, sum); // print 4 places behind the decimal point

 int i;
 i = 5;
// print only the whole number part of sum and output at least i characters,
//    pad with leading spaces if number requires fewer than i characters 
printf("=\n%*.*lf\n", i, 0, sum); 

答案 3 :(得分:0)

这一行存在问题:

double sum=552074001368;

由于这是一个整数文字,编译器将首先检查该数字是否适合int,然后是long,然后是long long。如果它不适合long long我怀疑你会得到一个编译错误或未定义的行为环绕,我不知道哪个。

如果您的编译器支持long long,那么代码将起作用,并且该数字将存储在临时long long中(将被优化掉)。然后将此long long存储在double

相反,写这样:

double sum=552074001368.0;

.0语法为您提供双浮点文字,而根本不涉及整数类型。

答案 4 :(得分:0)

double sum=552074001368LL;
long long long_sum;
long_sum = (long long)(sum);
if(sum>=0) printf("=\n%lld\n",long_sum);
else printf("=\n%lld\n",-long_sum);