我在浮点变量中存储了一个非常大的数字,但是当我打印它时,我想只显示整数部分而不是小数点后面的任何内容。
对于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位数一样。
答案 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);