四舍六入五考虑

原创 2015年07月07日 16:50:46

C版本(更正,请将long改成long long)

/*四舍六入五考虑
当有效位数后一位的数字≤4时,其后的数字直接舍去;
当有效位数后一位的数字≥6时,其后数字舍去并进1;
当有效位数后一位的数字=5时,要分两种情况:
5后面一位的数字如果不等于0,则舍5进1;
5后面一位数字如果等于0,又要分两种情况:
5的前面如果是奇数,则舍5进1;
5的前面如果是偶数,则舍5不进
*/
double roundex(double val, double precision){
	double ratio ( ::pow(10.0, precision) );
	double x(val * ratio);
	long longival (  (long long)x );

	/*获取有效的小数*/
	double m1( x -  (double)ival );
	double m2( m1 * 100 );
	long long dm((long long)m2);
	double mod ((double)dm / 100);

	if(mod >= 0.6 ){
		return (ival + 1)/ratio;
	}else if( mod < 0.5 ) {
		return ival/ratio;
	}else{
		if( 0.5 == mod  ){
			long long f( ival %10);/*获取个位值*/
			return ( 0 == (f % 2) ? ival : ival + 1) / ratio;
		}else{
			return (ival + 1) / ratio;
		}
	}
}
javascript版本

Number.prototype.roundex = function (precision) {
    var ratio = Math.pow(10, precision);
    var x = this * ratio;
    var ival = parseInt(x,10);
	
	/*获取有效的小数*/
	var m1 = x-ival;
	var m2 = m1 * 100.0;
	var dm = parseInt(m2,10);
	var mod = (dm / 100.0);
	
    if (mod >= 0.6) {                    /*6入 或者 当尾数为5,而尾数“5”的后面还有任何不是0的数字时,无论前一位在此时为奇数还是偶数,也无论“5”后面不为0的数字在哪一位上,都应向前进一位。*/
        return (ival + 1)/ratio;
    } else if (mod < 0.5) {          /*4舍*/
        return ival/ratio;
    } else {                                /*5考虑*/
        if (0.5 == mod) { /*当尾数为5,而尾数后面的数字均为0时,应看尾数“5”的前一位:若前一位数字此时为奇数,就应向前进一位;若前一位数字此时为偶数,则应将尾数舍去。数字“0”在此时应被视为偶数。*/
            var f = ival%10; /*获取5的前面的一位数字*/
			return ( 0 == (f % 2) ? ival : ival + 1) / ratio;
        } else {
            return (ival + 1) / ratio;
        }
    }
};


百度推广教程(六)

-
  • 1970年01月01日 08:00

四舍六入五考虑

C版本 /*四舍六入五考虑 当有效位数后一位的数字≤4时,其后的数字直接舍去; 当有效位数后一位的数字≥6时,其后数字舍去并进1; 当有效位数后一位的数字=5时,要分两种情况: 5后面一位的数字如果不...
  • kmblack1
  • kmblack1
  • 2015-07-07 16:50:46
  • 612

关于四舍六入五成双

我最近做项目,用到了一个四舍六入五成双,查资料发现原来想C#、JAVA这些程序都是用的四舍六入五成双。后来我跟我一个好朋友说道这个问题,他说这是银行家算法。现在小学数学课本上都是这个了。听得我狂汗,落...
  • blogremover
  • blogremover
  • 2006-06-26 14:57:00
  • 1683

四舍六入五成双(四舍六入奇偶效验)银行家算法

规则: 四舍六入五考虑, 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一。 c#: Math.Round(new Decimal(1.2050),2) ...
  • DeleteElf
  • DeleteElf
  • 2015-08-20 15:34:08
  • 2271

C语言printf(""),浮点数打印保留有效位数,小数部分的四舍五入

1.printf("%3.0f",floatNum):不保留小数 说明:%3.0f表明待打印的浮点数(floatNum)至少占3个字符宽,且不带小数点和小数部分,整数部分至少占3个位宽; 注意:这里的...
  • abcdu1
  • abcdu1
  • 2017-07-13 19:16:38
  • 4745

在Excel中自定义四舍六入函数Round46()

在水文计算中经常利用四舍六入法来进行近似计算,Excel中有一个四舍五入函数Round(),而没有四舍六入函数,为此编写了一个四舍六入函数以方便水文计算时使用。 一、四舍六入函数代码 '=...
  • csdm_cjm
  • csdm_cjm
  • 2015-02-16 12:00:00
  • 509

MFC 四舍五入算法

// 四舍五入// r 舍入值,iPlaces 舍入位正数为整数位,负数为小数位 (-1:0.1  0:1 1:10)double Round(double r, int iPlaces){ doub...
  • u014629983
  • u014629983
  • 2018-04-17 14:37:58
  • 13

java中小数的四舍六入和四舍五入

四舍六入为比较科学的小数舍入,具体规则为: //   四舍六入五考虑, //   五后非零就进一, //   五后为零看奇偶, //   五前为偶应舍去, //   五前为奇要进一。 ...
  • Magneto7
  • Magneto7
  • 2013-10-05 11:54:50
  • 2357

Math.Round是四舍五入还是五舍六入

在开发中发现一个以前未注意到的问题, 以前一直以为Math.Round是按四舍五入的原则处理的(从小到大中国的教育课程就是这样,至少我是这样看到的), 没想到时代在变化,国际形式日新月异(...
  • nicholas199109
  • nicholas199109
  • 2013-07-09 15:03:48
  • 1773

Javascript中 toFixed 的‘奇葩坑’

以前一直以为toFixed就是四舍五入的方法,后来又有一段时间以为toFixed是五舍六入。今天终于写的时候,终于才知道toFixed是一个叫做四舍六入无成双的诡异的方法。。。 什么是四舍六入五成双...
  • qwe502763576
  • qwe502763576
  • 2018-04-21 15:22:33
  • 11
收藏助手
不良信息举报
您举报文章:四舍六入五考虑
举报原因:
原因补充:

(最多只允许输入30个字)