【基础练习】【小数位数】小玉家的电费

题目来自 洛谷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);

——纸上得来终觉浅,绝知此事要躬行


你可能感兴趣的:(浮点数,基础练习)