(floor( X * 10 + 0.5)) / 10; //10需根據小數幾位而變化
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int n;
double chinese, english, math, allavg = 0, cavg = 0, eavg = 0, mavg = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> chinese >> english >> math;
allavg += chinese + english + math;
cavg += chinese;
eavg += english;
mavg += math;
}
allavg = (floor((allavg / (3 * n)) * 10 + 0.5)) / 10;
cavg = (floor((cavg / n) * 10 + 0.5)) / 10;
eavg = (floor((eavg / n) * 10 + 0.5)) / 10;
mavg = (floor((mavg / n) * 10 + 0.5)) / 10;
cout << fixed << setprecision(1) << allavg << " " << cavg << " " << eavg << " " << mavg << endl;
return 0;
}
請問一下,setprecision()本身就有四捨五入的功能,為何前面還需要使用floor呢?
回覆刪除我想可能是精確度的問題
回覆刪除因為不是很明顯 好像數值超過表示的位數會有問題
所以用另外一種方法四捨五入
(一般應該不會有這問題 也有可能是題目給的答案問題 我寫的時候也是很困惑
希望有幫助到你( ゚▽゚)/
參考:
http://yhhuang1966.blogspot.com/2014/03/java_23.html
感謝說明!
刪除另外如果不想用floor
回覆刪除把double換成float也會過
作者已經移除這則留言。
刪除嗯嗯,之後是用float過的,再次感謝說明:D
刪除