精确到小数点后n位的两种方法

引言:大家在写程序中多多少少会遇到这个问题,特别对一些初学者会出现这个问题,做个ACM竞赛的同学肯定都会用C语言的printf格式控制输出,但是习惯于用C++的同学也不是一点办法都没有啊,这篇blog中会介绍C++中如何使用,虽然稍微复杂一定,但是也不失为一种方法。

首先看一下代码(以求四个整数的和与平均值为例):

//求四个整数的和与平均值
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
	int a,b,c,d,e;
	double f;
	cin>>a>>b>>c>>d;
	e=a+b+c+d;//e存放和 ,为整数
	f=(double)e/4;//f存放平均值 ,为double
	printf("%d %.1f\n",e,f);	//C语言控制格式输出,小数点后面保留一位小数
	//C++输出流格式控制输出
	cout<<e<<" "<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(1)<<f;
	return 0;
}

  可以看到C语言的printf是很容易控制格式的,"%m.nf":输出浮点数,m为宽度,n为小数点右边数位

  同时注意到C++的cout输出流中使用到了两个函数setiosflags()和setprecision()

  下面介绍一下这两个函数:

     setiosflags()函数:setiosflags 是包含在命名空间iomanip 中的C++ 操作符,该操作符的作用是执行由有参数指定区域内的动作;

        iso::fixed 是操作符setiosflags 的参数之一,表示以定点的方式输出实数;

        iso::right 也是setiosflags 的参数,该参数的指定作用是在指定区域内右对齐输出;

     setprecision()函数:setprecision(n)可控制输出流显示浮点数的数字个数为n。C++默认的流输出数值有效位是6

   cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(1);

   合在一起的意思就是:输出一个右对齐的小数点后1位的浮点数,即作用是:控制小数点右边的位数。

参考资料:

  setprecision()与setiosflags()(c++小数点后面精确到n位)

  Printf()输出格式控制 setprecision()与setiosflags()(c++小数点后面精确到n位)

时间: 2024-12-21 15:42:24

精确到小数点后n位的两种方法的相关文章

JAVA除法保留小数点后两位的两种方法 Java Math的 floor,round和ceil的总结

floor 返回不大于的最大整数 round 则是4舍5入的计算,入的时候是到大于它的整数round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11. ceil 则是不小于他的最小整数 看例子   Math.floor Math.round Math.ceil 1.4 1 1 2 1.5 1 2 2 1.6 1 2 2 -1.4 -2 -1

JS正则--非负整数或小数[小数最多精确到小数点后两位]

function ValidPrice(obj) { s = obj.value; //var reg = /^[0-9]*\.[0-9]{0,2}$/; var reg = /^[0-9]+([.]{1}[0-9]{1,2})?$/; if (!reg.test(s)) { obj.value = ""; alert("必须为>=0的金额,精确到小数点后2位!"); obj.focus(); obj.select(); return false; } ret

Java中double类型的数据精确到小数点后两位

Java中double类型的数据精确到小数点后两位 多余位四舍五入,四种方法 一: double f = 111231.5585;BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 二: new java.text.DecimalFormat("#.00").format(3.1415926) 三: double d = 3.1415926

求斐波那契数列的相邻两项的比值,精确到小数后三位。

未完成,只能假设知道是9和10代入. 代码如下: package zuoye; import java.math.BigDecimal; /* * 求斐波那契数列的相邻两项的比值,精确到小数后三位. * p1,p2,p3......pi,pj,...求pi/pj * 1 1 2 3 5 8 13 * 5/8,8/13,...收敛 */ public class Test { static double feibo(int x){ if(x==1||x==2) return 1; return f

js保留小数点后N位的方法介绍

利用toFixed函数 代码如下 复制代码 <script language="javascript"> document.write("<h1>JS保留两位小数例子</h1><br>"); var a=2.1512131231231321; document.write("原来的值:"+a+"<br>"); document.write("两位小数点:&q

JAVA如何把一个float四舍五入到小数点后2位,4位,或者其它指定位数.

怎么使float保留两位小数或多位小数 http://meryvn.blog.163.com/blog/static/36962664201173010402629/ 两种方法: import   java.math.*;     ……     方法1:     float   f   =   34.232323;     BigDecimal   b   =   new   BigDecimal(f);     float   f1   =   b.setScale(2,   BigDecim

C#保留小数点后几位

String.Format("{0:N1}", a) 保留小数点后一位 String.Format("{0:N2}", a) 保留小数点后两位 String.Format("{0:N3}", a) 保留小数点后三位 C#保留小数位N位四舍五入 double s=0.55555; result=s.ToString("#0.00");//点后面几个0就保留几位 C#保留小数位N位四舍五入 double dbdata = 0.55

JS - 控制小数位数的方法(保留小数点后N位、以及小数取整)

开发中有时我们需要对小数进行取整,或者只保留 N 位小数进行显示.下面分别对这两种情况进行说明.这里假设我们有如下数字进行处理: var num = 5/3; console.log(num); 输出如下: 一.取整 1,直接取整(丢弃小数部分) 1 var num = parseInt(5/3);  // 1 2,四舍五入取整 1 var num = Math.round(5/3);  // 2 3,向上取整 1 var num = Math.ceil(5/3);  // 2 4,向下取整 1

javascript 取小数点后几位四种方法

javascript 取小数点后几位方法总结 Javascript取float型小数点后两位,例22.123456取成22.12,如何做? 1.通过substring截取. function getnum() { var num = 22.123456; var result = num.substring(0,s.indexOf(".")+3); alert(result); } 2. 正则表达式. function getnum() { var num = 22.123456; v