2.2.5 格式化带小数点的数字
计算机输出double类型的值时,格式可能与你预期的不同。例如,下面这个简单的cout语句就会产生很多种不同的输出:
- cout << "The price is $" << price << endl;
如果price的值是78.5,输出结果可能如下:- The price is $78.500000
或者如下:- The price is $78.5
甚至可能是以下形式(详情参见2.3节): - The price is $7.850000e01
以下输出恐怕是最不可能出现的,但这种格式才是最有意义的:- The price is $78.50
为保证得到预期输出,要在程序中包含一些指令告诉计算机如何输出数字。
可以在程序中插入一个"魔法配方",指定含有小数点的数字(比如double类型的数字)以日常生活中习惯的方式来输出。换言之,可以确切地指定小数位数。例如,为了显示两位小数,需要以下"魔法配方":
- cout.setf(ios::fixed);
- cout.setf(ios::showpoint);
- cout.precision(2);
在程序中插入上述3个语句,后续的任何cout语句都会按你指定的格式输出double类型的值。换言之,小数点之后刚好2位。例如,假设以下cout语句出现在上述"魔法配方"之后的某个地方,并假设price的值为78.5: - cout << "The price is $" << price << endl;
则输出结果肯定如下:- The price is $78.50
可用任何非负的整数代替"魔法配方"中的2,从而指定不同的小数位数。甚至能用int类型的变量代替2。
这个"魔法配方"将在第6章进一步讨论。现在,只需将这个"魔法配方"视为一长串指令,它的目的是告诉计算机你想以什么格式输出含有小数点的数字。
如果想更改小数位数,使程序中不同的值输出不同的小数位数,可以重复使用这个"魔法配方",用其他数字代替2。但是,重复这些"魔法配方"时,只需重复其中的最后一行。假如该"魔法配方"已在程序中出现过一次,那么只需添加下面这一行,即可让后续的所有double类型的变量输出5位小数:
- cout.precision(5);
输出double类型的值
在程序中插入以下"魔法配方",后续所有double类型(或允许保留小数的其他类型)的数字将以日常生活中最习惯的方式来输出,即含有两位小数:
- cout.setf(ios::fixed);
- cout.setf(ios::showpoint);
- cout.precision(2);
可用其他任何非负的整数代替其中的2,从而指定不同的小数位数。甚至能用int类型的变量代替2。