四舍五入

BigDecimal的操作工具类

℡╲_俬逩灬. 提交于 2019-12-02 16:28:48
import java.math.BigDecimal; /** * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类 * @author ameyume * */ public class Arith { /** * 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 * 确的浮点数运算,包括加减乘除和四舍五入。 */ //默认除法运算精度 private static final int DEF_DIV_SCALE = 10; //这个类不能实例化 private Arith(){ } /** * 提供精确的加法运算。 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(double v1,double v2){ BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } /** * 提供精确的减法运算。 * @param v1 被减数 * @param v2 减数 * @return 两个参数的差 */ public

delphi的函数round、trunc、ceil、floor 和RoundTo

感情迁移 提交于 2019-12-02 16:25:24
1. Round (四舍六入五留双) 功能说明:对一个实数进行四舍五入。(按照银行家算法) 例: var i, j: Integer; begin i := Round(1.5); // i等于2 j := Round(2.5); // j等于2 end; 在 Delphi 中使用Round函数得到的答案有时与我们所预期的会不太一样:采用的是四舍六入五留双。即当舍或入位大于或 小于五时按四舍五入来处理,而当舍或入位等于五时,就要看前面一位是什么,根据奇进偶不进,它总是返回一个偶数值。 例: i:= Round(11.5)//i等于12 i:= Round(10.5)//i等于10 这种Round其实是按照银行家算法,统计学上一般都用这种算法,比传统的"四舍五入"要科学。 如果要使用传统的"四舍五入"方法,可以使用下面函数: function RoundClassic(R: Real) 2. trunc (取得X的整数部分) 如: trunc (-123.55)=-123, floor(123.55)=123 3. ceil (取得大于等于X的最小的整数) 如:ceil(-123.55)=-123, ceil(123.15)=124 4. floor (取得小于等于X的最大的整数) 如:floor(-123.55)=-124,floor(123.55)=123 5.RoundTo

Java中Double保留小数位

一个人想着一个人 提交于 2019-12-02 15:30:12
1.能四舍五入 double d = 114.145; d = (double) Math.round(d * 100) / 100; System.out.println(d); 2. BigDecimal.ROUND_HALF_UP表示四舍五入,BigDecimal.ROUND_HALF_DOWN也是五舍六入,BigDecimal.ROUND_UP表示进位处理(就是直接加1),BigDecimal.ROUND_DOWN表示直接去掉尾数。 double d = 114.145; BigDecimal b = new BigDecimal(d); d = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(d); 3. 00表示保留后两位,它的处理方式是直接截掉不要的尾数,不四舍五入。 double d = 114.145; DecimalFormat df = new DecimalFormat("#.00"); String str = df.format(d); System.out.println(str); 4.%.2f表示保留后两位,能四舍五入。 double d = 114.145; String.format("%.2f", d); 5.RoundingMode.HALF

随机数Random和静态函数Math

不羁岁月 提交于 2019-12-02 03:26:17
随机数 ( Random ) 通过种子的伪随机。 线性求余算法 如果参数不填,默认种子是时间 下面代码中有Math的一些常用方法 1 public class Demo01 { 2 3 public static void main(String[] args) { 4 5 6 Random random=new Random(); 7 int s=random.nextInt(10); 8 System.out.println(s); 9 10 //求绝对值 11 System.out.println(Math.abs(-2)); 12 13 //浮点型保留2位小数 14 System.out.println(String.format("%.2f", Math.PI)); 15 16 double a=-2.3; 17 //向上取整 没有有四舍五入 18 System.out.println(Math.ceil(a)); 19 //向下取整 没有有四舍五入 20 System.out.println(Math.floor(a)); 21 //最近取整,有四舍五入 22 System.out.println(Math.round(a)); 23 24 //求幂 返回double类型 25 System.out.println(Math.pow(3, 4)); 26 27 /

如何处理报表中的舍位平衡

烈酒焚心 提交于 2019-12-01 22:21:44
在报表的数据统计中,常常会根据精度呈现或者单位换算等要求,需要对数据执行四舍五入的操作,这种操作称为舍位处理。简单直接的舍位处理有可能会带来隐患,原本平衡的数据关系可能会被打破。 为了保证报表中数据关系的正确,就需要调整舍位之后的数据,使得数据重新变得平衡,这样的调整就叫做舍位平衡。在这里我们就讨论一下如何利用集算器来处理舍位平衡问题。 舍位处理往往会采取四舍五入计算,这时就会产生误差,而如果报表中有这些数据的合计数值,那么舍位时产生的误差就会积累,有可能导致舍位过的数据与其合计值无法匹配。例如,保留一位小数的原始的数据是4.5+4.5=9.0,而四舍五入只保留整数部分后,平衡关系就变为5+5=9了,看上去明显是荒谬的。在这样的情况下,需要在保持合计值正确的条件下,调整非合计数据舍位后的结果,使得数据关系重新平衡,例如调整为4+5=9。这个简单的例子就是典型舍位平衡。 单向舍位平衡 如果在数据统计时,每个数据只用于一次合计,那么在处理舍位平衡时,只需要根据合计值的误差,调整使用的各项数据就可以了,这属于比较简单的情况。例如: A1的序列中存储了一些数据,在B1中计算了它们的合计值,结果如下: 现在,将数据取整,重新统计。A2中将序列中每个数据用round函数四舍五入取整,得到新的序列。在B2中则将B1中的结果取整,这是数据取整后应该获得的结果

js 实现四舍五入&fixed方法异常处理

丶灬走出姿态 提交于 2019-12-01 08:02:14
JS四舍五入的函数:toFixed(n),n为要保留的小数位数,n取0~20。 问题:当n超过20的时候,JS会出错。 举例一: var d = 10.005; var f = d.toFixed(2); alert(f); 输出结果:10.01 举例二: var h = 0.007; h.toFixed(2); alert(h); 输出结果:0.00 解决方案: (一)对JS中的Number类型的toFixed方法重写。 Number.prototype.toFixed = function(s) { var changenum = (parseInt(this * Math.pow(10, s) + 0.5) / Math.pow(10, s)).toString(); index = changenum.indexOf("."); if (index < 0 && s > 0) { changenum = changenum + "."; for (i = 0; i < s; i++) { changenum = changenum + "0"; } } else { index = changenum.length - index; for (i = 0; i < (s - index) + 1; i++) { changenum = changenum + "0"; }

java中的Math.ceil、Math.floor和Math.round

两盒软妹~` 提交于 2019-11-30 16:06:50
ceil意为天花板,指向上取整;floor意为地板,指向下取整;round指四舍五入 package com.company; public class Main { public static void main(String[] args) { //向上取整 System.out.println(Math.ceil(11.3));//12.0 System.out.println(Math.ceil(-11.3));//-11.0 //向下取整 System.out.println(Math.floor(11.3));//11.0 System.out.println(Math.floor(-11.3));//-12.0 //四舍五入 算法为Math.floor(x+0.5) 即原来的数字加上0.5再向下取整 System.out.println(Math.round(11.4));//11 System.out.println(Math.round(11.5));//12 System.out.println(Math.round(11.6));//12 System.out.println(Math.round(-11.4));//-11 System.out.println(Math.round(-11.5));//-11 System.out.println(Math

hive数字处理

一曲冷凌霜 提交于 2019-11-30 02:58:09
在hive中,两个字段做除法,如何取得想要的小数位数。 如果非科学计数法,比如1/3,没有0,所有就不会存在科学计数法,所以如果想要取多少位,直接round(1/3,2)即可。 如果是科学计数法,比如9/1000000001,结果中0比较多,就会存在科学计数法,这时round(9/10000000001,3)肯定是0,因为只取3位小数,四舍五入还是0,只有当你取更多位的小数时,才有可能不会四舍五入。还有有些数字即使你写了round(1/3,2)*100,按道理是整数,但是求出来的结构有可能就是带有小数的,这个地方很不解。 一个比较明确的位数输出结果是如下结构:cast((1-t1.bad_num/t1.all_num) as decimal(10,4))*10000,这样的一定就是整数了,而且强制转换成decimal后,数据也会进行四舍五入。 来源: oschina 链接: https://my.oschina.net/u/2260928/blog/807649

BigDecimalUtils BigDecimal加减乘除

拥有回忆 提交于 2019-11-30 00:34:32
public class BigDecimalUtil { private static int DEF_DIV_SCALE = 10 ; // 默认精确的小数位 /** * 提供精确的加法运算。 * * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add ( double v1 , double v2 ) { BigDecimal b1 = new BigDecimal ( Double . toString ( v1 ) ) ; BigDecimal b2 = new BigDecimal ( Double . toString ( v2 ) ) ; return b1 . add ( b2 ) . doubleValue ( ) ; } /** * 提供精确的减法运算。 * * @param v1 被减数 * @param v2 减数 * @return 两个参数的差 */ public static double sub ( double v1 , double v2 ) { BigDecimal b1 = new BigDecimal ( Double . toString ( v1 ) ) ; BigDecimal b2 = new BigDecimal ( Double .