题目来自 洛谷P1422
月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。
题目很简单,但是做了才知道原来我不会写流输出控制小数位数= =果然书到用时方恨少事非经过不知难、
这里引用一份来自本站xidian13071185老师的文字:
#include <iostream>
#include <iomanip>
using namespace std;
int main( void )
{
const double value = 12.3456789;
cout << value << endl; // 默认以6精度,所以输出为 12.3457
cout << setprecision(4)
<< value << endl; // 改成4精度,所以输出为12.35
cout << setprecision(8) << value << endl; // 改成8精度,所以输出为12.345679
cout << fixed << setprecision(4)
<< value << endl; // 加了fixed意味着是固定点方式显示,所以这里的精度指的是小数位,输出为12.3457
cout << value << endl; // fixed和setprecision的作用还在,依然显示12.3457
cout.unsetf( ios::fixed ); // 去掉了fixed,所以精度恢复成整个数值的有效位数,显示为12.35
cout << value << endl;
cout.precision( 6 ); // 恢复成原来的样子,输出为12.3457【可以通过这种方法统一规定位数
cout << value << endl;
}
原址:http://blog.csdn.net/xidian13071185/article/details/4672344
于是本题代码:
#include<iostream> #include<iomanip> using namespace std; int main(){ double n; cin>>n; if (n>400) cout<<fixed<<setprecision(1)<<150*0.4463+250*0.4663+(n-400)*0.5663; else if(n>150) cout<<fixed<<setprecision(1)<<150*0.4463+(n-150)*0.4663; else cout<<fixed<<setprecision(1)<<n*0.4463; return 0; }
顺带复习一下,如果用C标注输入输出,本题应当这样写:
printf("%.1lf",value);
——纸上得来终觉浅,绝知此事要躬行