四舍六入五考虑

原创 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;
        }
    }
};


关于四舍六入五成双

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

JS四舍六入五单双

  • 2014年03月11日 14:35
  • 2KB
  • 下载

四舍五入VS银行家舍入 (四舍六入五取偶)

相信细心的程序员们早就发现了.net环境下默认舍入算法的是“四舍六入”的算法。从小学我们就学过“四舍五入”算法,但是更加科学的舍入办法应该是“四舍六入”,也就是今天我们要讨论的“银行家舍入”。 大家可...

java速度入五._多线程编程基础

首先是线程的创建和jion()方法的使用。 class Sleeper extends Thread{private int sleeptime;public Sleeper(String name,...

四舍六入五成双excel加载宏

  • 2015年08月20日 10:41
  • 23KB
  • 下载

四舍六入五成双

1、要解决你的问题, 你需要在对应的小数位上+0.5 再round,比如你求2位小数, 你就 round(field+0.005) 2、出现你的问题原因是:程序员和数据库一般都采用四舍六入五成双   ...
  • yilin54
  • yilin54
  • 2011年03月17日 11:28
  • 939

Excel中的四舍六入五成双

我们都知道四舍五入是一种精确的计数保留法,但是他就是最精确,最能得到我们想要的吗?反正我之前认为他是可以的,但是今天企业要求我们用了一种新得保留方法,四舍六入五成双,他是一种比较精确比较科学的计数保留...

linux浮点数四舍五入还是五舍六入…

上午娃娃问我一个问题: awk里面  printf("%.2f",test);一个浮点数,比如test=0.725,相同的代码,在不同的集群上跑出来结果不一样,有的打印0.72,有的打印0.73,这是...

JS保留小数点(四舍五入、四舍六入)实例

floatDecimal.html //保留两位小数 //功能:将浮点数四...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:四舍六入五考虑
举报原因:
原因补充:

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