使用BigDecimal(避免E科学计数法)四舍五入和百分比四舍五入保留2位小数
2017-11-28 17:47
956 查看
package com.winner.kl.entity.vo.V3; import java.math.BigDecimal; /** * @author wangxl * @date 2017-11-27 */ public class BigDecimalTest { public static void main(String[] args) { java.math.BigDecimal bd1 = new java.math.BigDecimal(0.145444444444444444444);//0.15 String s = bd1.setScale(2, java.math.BigDecimal.ROUND_HALF_UP).toPlainString(); System.out.println(s); double num1 = 50123.12E25; System.out.println(num1);//打印出5.012312E29 BigDecimal bd = new BigDecimal(num1); System.out.println(bd.toPlainString());//不带小数点501231200000000030561980645376 System.out.println(bd);//和上面一样 不带小数点501231200000000030561980645376 BigDecimal bigDecimal = bd.setScale(2, BigDecimal.ROUND_HALF_UP); System.out.println(bigDecimal);////打印siteScale的返回值才能拿到保留2位小数的值或用下面的.toPlainString() System.out.println("我我我哦我哦喔喔噢噢" + ""+bd.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()); java.math.BigDecimal a = new java.math.BigDecimal("1.35"); // 取一位小数,直接删除后面多余位数,故取值1.3. a.setScale(1, java.math.BigDecimal.ROUND_DOWN); // 取一位小数,删除后面位数,进一位,故取值1.4. a.setScale(1, java.math.BigDecimal.ROUND_UP); // 取一位小数,四舍五入,故取值1.4. a.setScale(1, java.math.BigDecimal.ROUND_HALF_UP); // 取一位小数,五舍六入,故取值1.3. ROUND_HALF_DOWN表示遇5不进1(即1.5保留小数点0位是1)(13.5502中保留1位,比较的是0.0502比5大,所以进一位13.6); a.setScale(1, java.math.BigDecimal.ROUND_HALF_DOWN); java.math.BigDecimal bd2 = new java.math.BigDecimal(0.145444444444444444444);//0.145444444444444431763230340948211960494518280029296875 String s2 = bd2.toPlainString(); System.out.println(s2); /*BigDecimal在创建的时候可以传入String和double,但是最好使用String,至于原因看看如下代码就知道了: 复制代码 代码如下: BigDecimal b = new BigDecimal("12.000001"); System.out.println(b); BigDecimal c = new BigDecimal(12.01); System.out.println(c); 运行结果为: 12.000001 12.0099999999999997868371792719699442386627197265625 可以看出在传入double的时候精度会丢失。*/ java.math.BigDecimal b = new java.math.BigDecimal("12.000001"); System.out.println(b); java.math.BigDecimal b1 = new java.math.BigDecimal("11.00"); java.math.BigDecimal b2 = new java.math.BigDecimal("12.00"); //加减乘除 java.math.BigDecimal add = b1.add(b2); java.math.BigDecimal subtract = b1.subtract(b2); java.math.BigDecimal multiply = b1.multiply(b2); BigDecimal divide = b1.divide(b2, 2, BigDecimal.ROUND_HALF_DOWN);// BigDecimal.ROUND_HALF_UP 表示四舍五入的规则 } /*public static void main(String[] args) { //百分比四舍五入保留2位小数 Double today = Double.valueOf(inToday); Double last = Double.valueOf(inLast); //方案1是不满足百分比保留2位小数的,返回的值是0.03这样的不带%,推荐用方案2:这里也用BigDecimal构造,两个double除完后,将double转为BigDecimal,然后bd.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString();就保留了2位小数 //double v = (today - last) / last; //java.math.BigDecimal bd = new java.math.BigDecimal(v);//将double转为BigDecimal //bd.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() //百分比四舍五入 NumberFormat nt = NumberFormat.getPercentInstance(); nt.setRoundingMode(RoundingMode.HALF_UP);////设置为4舍五入,如果RoundingMode.UP不管是0.14441都是进位14.45% nt.setMinimumFractionDigits(2); String format = nt.format(0.14441444); System.out.println(format); }*/ }
Double today = Double.valueOf(inToday); Double last = Double.valueOf(inLast); NumberFormat nt = NumberFormat.getPercentInstance(); nt.setRoundingMode(RoundingMode.HALF_UP);//设置为4舍五入,如果RoundingMode.UP不管是0.14441都是进位14.45% nt.setMinimumFractionDigits(2); double v = today - last; if (v == 0.00) { return "0.00%"; } return nt.format((today - last) / (double)last);//除以0.0自动返回∞%(不带+号) 如果分子为0自动返回0.00%
相关文章推荐
- java保留2位小数及BigDecimal使用
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- js 四舍五入并保留2位小数
- 【Jquery】强制保留2位小数,四舍五入,不足两位小数自动在后面补上 .00
- Java中要使用 BigDecimal(定点数) 进行小数的相关操作,避免使用float等浮点数
- js四舍五入保留2位小数的位数。
- BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
- c++、vc++ 数据精度、小数点取舍、数据四舍五入、保留2位小数、数据之间加入","
- BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
- C#中小数点后保留两位小数,四舍五入的函数及使用方法
- Java使用BigDecimal保留double、float运算精度、保留指定位数有效数字、四舍五入
- sql中保留一位小数的百分比字符串拼接,替换函数,换行符使用
- js 四舍五入并保留2位小数
- 已知平面上若干个点的坐标。需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数)。
- c#的一些小知识点:object/string 转化为float,float保留2位小数,Replace的使用,静态方法的调用
- 使用bigdecimal来保留小数
- asp.net 保留2位小数 四舍五入
- js 四舍五入并保留2位小数