2016-10-19 1 views
-2

これは私の頭の中で今一週間のことであり、わかりません。 は、私はこの問題を持っている:2小数点以下3桁の数値を平均化する(丸めなし!)

//1.Make an average of 3 numbers 
//2.Display average with two decimals exactly 
//3.Average must NOT be rounded 

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

int main() 
{ 
    double x, y ,z, average; 
    cin>> x >> y >> z; 
    average = (x+y+z)/3; 

    cout<<setprecision(2)<<fixed<< average; 

return (0); 
} 

これは私が思い付いたものですが、どうやらそれは100%に動作しません。 (それは時々平均を切り上げます)

誰が失敗するのか、どうすればいいのか説明できますか?

+1

だから、あなたは*に*番号を切り捨てたいです2小数? –

+0

出力が失敗する入力例を挙げることができますか?それは働くように思われる(私が仕事によって何を意味するかを考えて)、100% –

+0

はい、これは解決策だと思います。どうすればこれを達成できますか? –

答えて

0

これは定義と仕様の問題です。部門(x+y+z)/3は浮動小数点のもので、setprecision()は明らかに小数点を切り捨てるのではなく丸めます。別の関数(丸めではなく切り捨て)を選択するか、部分的には固定小数点ロジックを使用する必要があります。たとえば、x、y、zが整数の場合、((x+y+z)*100/3)/100.0を使用できます。 (「量」データが表現されて処理される場合は、かなり一般的なアプローチです)。

OR(x、y、zは、浮動小数点数であれば):

floor((x+y+z)*100/3)/100 
0

この機能は、あなたが探している正確に何をすることができます

#include <math.h> 
double truncate(double number, int precision) { 

    return floor(pow(10, precision) * number)/pow(10, precision); 
} 
関連する問題