為了不受浮點數的誤差干擾,使用字串來解,四捨五入到小數點以下第2位所以只要專注於到小數點3位即可
注意長度可能只有3位(ex:0.2)導致溢位和負數的字串長度變更和-0.00要輸出0.00的特例
以下為程式碼
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
while(cin >> str)
{
int ne=0;
if(str[0]=='-') ne=1;
if(str.length()==3+ne) str=str+'0';
else if(str.length()>=5+ne)
{
if(str[4+ne]>='5') str[3+ne]++;
if(str[3+ne]>'9')
{
str[3+ne]='0';
str[2+ne]++;
}
if(str[2+ne]>'9')
{
str[2+ne]='0';
str[0+ne]++;
}
}
if(ne==1 && str[1]=='0' && str[3]=='0' && str[4]=='0')
cout << str.substr(1,4) << '\n'; //特例-0.00輸出0.00
else cout << str.substr(0,4+ne) << '\n';
}
return 0;
}