0

どうやら精度を設定する方法がわかりません。このコードは、料金所を通過する車の料金を出力します。

void TollBooth::arrive(Car c)
{
  carcount += 1;
  int cost;
  int doors = c.getDoors();
  cost = 3 + doors;
  total+=cost;
  cout << setw(12) << left << "Car: "<< setw(8) <<c.getID()<< setw(8) 
    << "  Amount Due: $ " << setw(5) << fixed << right << setprecision(2) << cost << endl;
}

ただし、出力されるのは、後続ゼロのない「コスト」です。

4

4 に答える 4

1

を使用しないでくださいsetprecision。末尾.00を直接エコーするだけです (そして、前の を調整しますsetw)。

void TollBooth::arrive(Car c)
{
    carcount += 1;
    int doors = c.getDoors();
    int cost = 3 + doors;
    total += cost;
    cout << setw(12) << left << "Car: "<< setw(8) <<c.getID()<< setw(8) << "  Amount Due: $ " 
    << setw(3) << right << cost << ".00" << endl;
}

浮動小数点にキャストすることができ、int値については、私が知っているすべてのアーキテクチャで安全に使用できるdouble はずです。ただし、キャストしないでくださいfloatコメントで指摘したように、IEEE 32 ビット浮動小数点数には、範囲全体を表す精度がありませんint(たとえば、IEEE 32 ビットにキャストすると、(1 << 24) + 1と等しくなります)。必要でない場合は、精度エラーのリスクを回避することをお勧めします。1 << 24float

于 2016-04-19T18:31:43.140 に答える
0

あなたは使用することができsetprecisionますshowpoint

double a = 14;
cout << setprecision(4) << showpoint << a;

出力:

14.00

欠点は、setprecision 引数を計算する必要があることです。

于 2016-04-19T19:04:28.143 に答える