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