1

C++ で出力をフォーマットして小数点以下の桁数がある場合は表示する方法、または表示する小数点がない場合は整数全体を表示する方法について助けが必要です。

it should show 95.7 // When there is decimal
it should show 90   // When there is no decimal

私が書いた:

cout << setprecision(1) << fixed; 

期待される出力が得られません。90 を印刷する代わりに、90.0 を印刷します。

4

2 に答える 2

1

除算を行っているとします。

  1. の使用cout:
    i) 小数部分が であることが判明した場合.000000、 usingcoutは整数 (整数) 部分のみを出力します。
    ii) 小数部分が 以外の場合は、小数部分も出力.000000coutます。

    したがって、どちらの場合も、cout必要な動作につながります。

  2. 使用printf()
    i) 小数部が であることが判明した場合.000000、 を使用printf()すると整数が出力され、その後に小数部が続き3.000000ます。この場合、手動で処理して、出力をそのまま取得する必要があります3。文字列への変換、組み込み関数の使用など、さまざまなアプローチに従うこと
    ができ.000000ます。printf()3.123456

以下のコードを参照してください。除算の余りが 0 の場合、それは小数部分がであり、数値を出力する前に.000000型キャストすることを意味するという事実を使用しています。int上記のように、別のアプローチを使用する必要がある場合があります。

#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    double num1=270.0, num2=90.0;
    cout<<num1/num2<<"\n";                      //prints just 3
    printf("%f\n", num1/num2);                  //prints 3.000000
    if((int)num1%(int)num2==0)                  //means num1 is a multiple of num2.  So decimal is .000000
        printf("%d\n", (int)num1/(int)num2);    

    num2=91.0;
    cout<<num1/num2<<"\n";                      //prints 2.96703
    printf("%f\n", num1/num2);                  //prints 2.967033
    if((int)num1%(int)num2!=0)                  
        printf("%f\n", num1/num2);  
    return 0;
}

ライブデモはこちら.

于 2016-06-10T03:11:09.003 に答える