1

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

对于 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 位数。

4

5 回答 5

6

使用精度修饰符.0并打印floor数字:

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

(或者 的floorabs如果您只想要幅度,如您的示例代码中所示。)

于 2012-04-26T16:17:25.027 回答
5

我想你追求的是%.0f. 例如:

#include <stdio.h>

int main(){

    double x = 1234.567;

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

...印刷:

1235
于 2012-04-26T16:18:55.647 回答
0

这条线是有问题的:

double sum=552074001368;

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

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

相反,这样写:

double sum=552074001368.0;

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

于 2012-04-26T17:44:18.440 回答
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); 
于 2012-04-26T16:29:43.233 回答
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);
于 2012-04-26T22:17:54.863 回答