1

非常に大きな数値をfloat変数に格納しましたが、それを出力するときは、整数部分のみを表示し、小数点以下は何も表示したくありません。

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

精度修飾子を使用して.0floor数値のを出力します。

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=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 に答える
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=552074001368;

これは整数リテラルであるため、コンパイラは最初に数値が、、int次にlong、に収まるかどうかをチェックしlong longます。収まらない場合はlong long、コンパイラエラーまたは未定義動作のラップアラウンドが発生する可能性がありますが、どちらかはわかりません。

コンパイラがをサポートしている場合long long、コードは機能し、番号は一時的に保存されlong longます(最適化されます)。これlong longは、の中に保存されますdouble

代わりに、次のように記述します。

double sum=552074001368.0;

.0構文は、整数型をまったく含まない倍精度浮動小数点リテラルを提供します。

于 2012-04-26T17:44:18.440 に答える