首页 > 其他分享 >double保留两位小数

double保留两位小数

时间:2023-11-11 15:32:54浏览次数:30  
标签:四舍五入 两位 String double value str 小数 dou

我们都知道double和float都是浮点型,在转型或者比较的时候可能出现问题,这里讲一下怎么针对double类型做精度处理

返回类型为double(四舍五入)

  1. 使用Math.round转成long再转回double
double dou = 3.1487426;
dou = (double) Math.round(dou * 100) / 100;   
System.out.println(dou);
  1. 使用BigDecimal进行格式化
double dou = 3.1487426;
BigDecimal bigDecimal = new BigDecimal(dou).setScale(2, RoundingMode.HALF_UP);
double newDouble = bigDecimal.doubleValue();
System.out.println(newDouble);

返回类型是 String【需要去除末尾多余0的,请看第4点】

  1. 使用String.format()格式化(四舍五入)
double dou = 3.1487426;
String douStr = String.format("%.2f", dou)
System.out.println(douStr);
  1. 使用NumberFormat进行格式化(四舍五入)
double dou = 3.1487426;
NumberFormat numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(2);
// numberFormat.setRoundingMode(RoundingMode.UP);  //默认的模式就是四舍五入,可以省略
String douStr = numberFormat.format(dou)
System.out.println(douStr);
  1. 使用BigDecimal进行格式化(四舍五入)
double dou = 3.1487426;
DecimalFormat decimalFormat = new DecimalFormat("#.00");
String str = decimalFormat.format(dou);
System.out.println(str);
  1. 去除末尾多余的 0
	 /**
     * 方式一:格式化数值(四舍五入),去除末尾无效的0
     *
     * @param value 值
     * @param scale 保留小数位数
     * @return
     */
    public static String scaleTrimZero(Double value, int scale) {
        if (Objects.isNull(value)) {
            return "";
        }
        // 使用 stripTrailingZeros() 会变成科学计数法,需要使用 toPlainString() 转字符串
        return BigDecimal.valueOf(value).setScale(scale, RoundingMode.HALF_UP).stripTrailingZeros().toPlainString();
    }
    
    /**
     * 方式二:格式化数值(四舍五入),去除末尾无效的0
     *
     * @param value 值
     * @param scale 保留小数位数
     * @return
     */
    public static String scaleTrimZero(Double value, int scale) {
        if (Objects.isNull(value)) {
            return "";
        }
        BigDecimal bigDecimal = BigDecimal.valueOf(value).setScale(scale, RoundingMode.HALF_UP);
        String str = bigDecimal.toString();
        if (str.contains(".")) {
            str = str.replaceAll("0+$", "");
            str = str.replaceAll("[.]$", "");
        }
        return str;
    }












标签:四舍五入,两位,String,double,value,str,小数,dou
From: https://blog.51cto.com/u_16071479/8318286

相关文章

  • java的double、float类型的比较
    在java中,针对double、float类型的运算和比较都最好不要直接进行,可以依靠BigDecimal来进行一、比较大小转换成long再比较,(这是long是基本类型,而不是Long对象,对象比较不要用==)Double.doubleToLongBits(0.042421d)==Double.doubleToLongBits(0.2342401d)Double.doubleToL......
  • js小数运算出现多位小数如何解决
    为什么操作小数会出现误差?浮点数值的最高进度是17位小数,但在进行运算的时候其精确度却远远不如整数;整数在进行运算的时候都会转成10进制; 而Java和JavaScript中计算小数运算时,都会先将十进制的小数换算到对应的二进制,一部分小数并不能完整的换算为二进制,这里就出现了第一次的误差......
  • 问题 E: 兔兔的最小数组
    如果你觉得并查集难以理解的话请看此篇题意:求字典序最小思路:比较字典序最小,类似于字符串的比较:只要前面保证最小即可,如:1000大于0111首先最简单,考虑暴力枚举每个b数组,使得取模后最小,时间复杂度为n^2,(注意:使用后的b数组应该删除)暴力肯定会wa,所以考虑优化因为是查找b数组中的......
  • Java float保留两位小数或多位小数
     Javafloat保留两位小数或多位小数方法1:用Math.round计算,这里返回的数字格式的.   floatprice=89.89;intitemNum=3;floattotalPrice=price*itemNum;floatnum=(float)(Math.round(totalPrice*100)/100);  //如果要求精确4位就*10000然后/10000方法2(OK):用DecimalFo......
  • 面试必刷TOP101:21、旋转数组的最小数字
    题目题解二分法:importjava.util.ArrayList;publicclassSolution{publicintminNumberInRotateArray(int[]array){//特殊情况判断if(array.length==0){return0;}//左右指针ijinti=0,j=array.......
  • C++ float与double类型的简单区别
    1.有效位数与精度有效位和精度的两个概念是不同的,我们先说float和double各自的有效位。在float与double中默认的有效位都是6位有效位,意思就是从第一个不为0的数字算起有6个数字是有效的后边无效的数字也不会显示,如下图:代码:运行结果:可以看出不管你的float定义的有多少位小......
  • HanLP — Aho-Corasick DoubleArrayTire 算法 ACDAT - 基于双数组字典树的AC自动机
    双数组字典树能在O(1)(1是模式串长度)时间内高速完成单串匹配,并且内存消耗可控,然而软肋在于多模式匹配。如果要匹配多个模式串,必须先实现前缀查询,然后频繁截取文本后缀才可多匹配。比如ushers、shers、hers…这样一份文本要回退扫描多遍,性能较低。既然AC自动机的goto表本身就是一......
  • JavaScript 将大数组拆分成多个小数组 循环调用接口
    项目需求:数据列表批量选择提交购物车,一次性提交数据量过大接口会报错,传递的参数是选中数据id的数组。项目运行很久了不做大改动,将提交数据总数限制在2000条以内,每500条走一次接口。思路:1.写一个将大数组拆分多个小数组的方法,arr为大数组,len为要拆分的小数组长度arrGroup(arr,......
  • InnoDB 存储引擎之 Double Write Buffer
    一、概述InnoDB默认page页大小为16KB,Linux操作系统文件交互的最小单位是4KB,而磁盘的最小交互单位是扇区,大小一般为512B假设InnoDB存储引擎在向磁盘写入数据时,Mysql服务器突然宕机,那么就有可能只有一部分数据页写入到磁盘,另外一部分数据发生丢失,这种情况称为......
  • 单细胞测序 doublet 二聚体
    Doublets及其形成的原因单细胞测序期望每个barcode标签下只有一个真实的细胞,但是实际数据中会有两个或多个细胞共用一个barcode的情况,业内称之为doublets或multiplets(后面统称为doublets)。Doublets形成的原因主要是高通量单细胞测序一般使用液滴微流控(dropletmicrofluidi......