Java BigDecimal除法精度和格式化输出方式

目录
  • BigDecimal除法精度和格式化输出
    • 答案
  • BigDecimal的用法详解
    • 保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理
      • 构造器描述
      • 方法描述
      • 常用方法

BigDecimal除法精度和格式化输出

import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import java.text.DecimalFormat;
public class Main {
    public static void main(String[] args) {
        //保留两位小数
        DecimalFormat df1 = new DecimalFormat("0.00");
        DecimalFormat df2 = new DecimalFormat("#.##");
        //0.00表示没数字位置用0补齐,#。##代表有就有没有就没有
        System.out.println(df1.format(0.156));
        System.out.println(df2.format(0.156));
        //高精度实数除法
        MathContext mc = new MathContext(10, RoundingMode.HALF_DOWN); //必须设置精度
        //ROUND_HALF_UP: 遇到0.5的情况时往上近似,例: 1.5 -> 2
        //ROUND_HALF_DOWN : 遇到0.5的情况时往下近似,例: 1.5 -> 1
        BigDecimal a = BigDecimal.valueOf(5.16545213);
        BigDecimal b = BigDecimal.valueOf(1.512345);
        BigDecimal ans = a.divide(b, mc); //高精度整数不用设置精度,实数必须要
        System.out.println(ans);
        System.out.println(df1.format(ans));
    }
}

答案

0.16

0.16

3.415524983

3.42

BigDecimal的用法详解

保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。

在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

构造器描述

  • BigDecimal(int) 创建一个具有参数所指定整数值的对象。
  • BigDecimal(double) 创建一个具有参数所指定双精度值的对象。
  • BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
  • BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象。

方法描述

  • add(BigDecimal) BigDecimal对象中的值相加,然后返回这个对象。
  • subtract(BigDecimal) BigDecimal对象中的值相减,然后返回这个对象。
  • multiply(BigDecimal) BigDecimal对象中的值相乘,然后返回这个对象。
  • divide(BigDecimal) BigDecimal对象中的值相除,然后返回这个对象。
  • toString() 将BigDecimal对象的数值转换成字符串。
  • doubleValue() 将BigDecimal对象中的值以双精度数返回。
  • floatValue() 将BigDecimal对象中的值以单精度数返回。
  • longValue() 将BigDecimal对象中的值以长整数返回。
  • intValue() 将BigDecimal对象中的值以整数返回。

常用方法

保留两位小数

/**
 * 保留两位小数
 */
@org.junit.Test
public void formatTest() {
    double num=13.154215;  

    //方式一
    DecimalFormat df1 = new DecimalFormat("0.00");
    String str = df1.format(num);
    System.out.println(str);  //13.15  

    //方式二
    // #.00 表示两位小数 #.0000四位小数
    DecimalFormat df2 =new DecimalFormat("#.00");
    String str2 =df2.format(num);
    System.out.println(str2);  //13.15  

    //方式三
    //%.2f %. 表示 小数点前任意位数   2 表示两位小数 格式后的结果为f 表示浮点型
    String result = String.format("%.2f", num);
    System.out.println(result);  //13.15
}  

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • JavaScript实现更换头像功能

    本文实例为大家分享了JavaScript实现更换头像功能的具体代码,供大家参考,具体内容如下 最主要的是使用jquery的插件 cropper 1.基本使用步骤 1.在 <head> 中导入 cropper.css 样式表: <link rel="stylesheet" href="/assets/lib/cropper/cropper.css" /> 2.在 <body> 的结束标签之前,按顺序导入如下的 js 脚本: <

  • Java StackOverflowError详解

    StackOverflowError 原因 : 函数调用栈太深了,注意代码中是否有了循环调用方法而无法退出的情况 原理 StackOverflowError 是一个java中常出现的错误:在jvm运行时的数据区域中有一个java虚拟机栈,当执行java方法时会进行压栈弹栈的操作.在栈中会保存局部变量,操作数栈,方法出口等等.jvm规定了栈的最大深度,当执行时栈的深度大于了规定的深度,就会抛出StackOverflowError错误. 典型的例子: public class StackOverFl

  • Java ResultSet案例讲解

    ResultSet ResultSet是我们使用jdbc连接时,查询的一个返回结果集,ResultSet resultSet = stmt.executeQuery(sql),下面就使用例子介绍ResultSet的使用 例子是通过jdbc连接查account表中的数据,然后用实体类Account封装起来,返回这个类的集合.  jdbc工具类代码 package com.lingaolu.Utils; import java.io.FileReader; import java.io.IOExce

  • Java 高精度的大数字运算方式

    目录 Java 高精度的大数字运算 高精度整数BigInteger 高精度浮点数BigDecimal (1)BigInteger和BigDecimal都是不可变(immutable) (2)BigDecimal有4个够造方法 (3)equals()方法认为0.1和0.1是相等的 (4)另外还有一些情形 java超长数据高精度计算(仅支持整数) Java 高精度的大数字运算 为了解决Java基本数据类型在运算时会出现的溢出和计算不精确的问题.Java 提供了两个类BigInteger和BigDec

  • Java DFA算法案例详解

    1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: 直接将敏感词组织成String后,利用indexOf方法来查询. 传统的敏感词入库后SQL查询. 利用Lucene建立分词索引来查询. 利用DFA算法来进行. 首先,项目收集到的敏感词有几千条,使用a方案肯定不行.其次,为了方便以后的扩展性尽量减少对数据库的依赖,所以放弃b方案.然后Lucene本身作为本地索引,敏感词增加后需要触发更新索引,并且这里本着轻量原则不想引入更多的库,所以放弃c方案.于是我们选定d方案为研究目标. 2.

  • java中求高精度除法,要求保留N位小数

    目录 求高精度除法,要求保留N位小数 题目要求 java 大数处理和高精度小数处理(so easy) 简单的例子: 部分简单代码 求高精度除法,要求保留N位小数 题目要求 高精度除法,要求保留N位小数(四舍五入),并且当整数部分为0时去除0的显示 import java.math.BigDecimal; import java.util.Scanner; public class BD { public static void main(String[] args) { Scanner scan

  • 聊聊Java BigInteger里面的mod和remainder的区别

    目录 BigInteger里的mod和remainder区别 mod是模运算,remainder是求余运算 BigInteger类的一些使用心得 下面总结一下以后方便找 1.给大数赋值 2.把int型转化为string型 3.把两个字符串拼接 BigInteger里的mod和remainder区别 下面直接上图吧,稍后解释关于mod和remainder以及负数求余求模的区别. mod是模运算,remainder是求余运算 如果被除数是正整数,mod和remainder的结果没区别.mod运算除数

  • Java sdk安装及配置案例详解

    1.安装Java SDK开发环境. 首先去官网下载Java SDK,http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html, 下载完成之后,开始安装. 点击下一步,安装完成. 2.配置Java SDK环境变量 单击"计算机-属性-高级系统设置",单击"环境变量".在"系统变量"栏下单击"新建",创建新的系统环境变量.

  • Java BigDecimal除法精度和格式化输出方式

    目录 BigDecimal除法精度和格式化输出 答案 BigDecimal的用法详解 保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理 构造器描述 方法描述 常用方法 BigDecimal除法精度和格式化输出 import java.math.BigDecimal; import java.math.MathContext; import java.math.RoundingMode; import java.text.DecimalFormat; public class

  • C++ string格式化输出方式

    flyfish 利用boost的format 头文件 #include <boost/format.hpp> boost::format f = boost::format("%.2f %s %d") % 1.234 %"123" % 12; std::string s = f.str(); 等同于 boost::format f = boost::format("%.2f %s %d"); f % 1.234 %"123&

  • Java中BigDecimal除法使用不当导致精度问题

    目录 I. 问题抛出 II. 源码定位 1. 整形传参构造 2. 浮点传参 3. String传参 4. 小结 在使用BigDecimal的除法时,遇到一个鬼畜的问题,本以为的精度计算,结果使用返回0,当然最终发现还是使用姿势不对导致的,因此记录一下,避免后面重蹈覆辙 I. 问题抛出 在使用BigDecimal做高精度的除法时,一不注意遇到了一个小问题,如下 @Test public void testBigDecimal() { BigDecimal origin = new BigDecim

  • 浅谈Java中格式化输出

    格式化控制台输出 要点提示: 在控制台上显示格式化输出:System.out.printf方法 常用的格式标识符 (图片来源: java核心技术卷1(第九版)) 格式标识符的解释 % 4 . 2 f 4为域宽度.输出的浮点数条目宽度至少为4,包括小数点和小数点后两位数字.这样,给小数点前分配了1位数字. 如果该条目小数点前的位数小于1,就在数字前面加空格. 如果该条目小数点前的位数大于7,则自动增加宽度. 2为精度().即想要输出的小数点的长度. f为转换码 指定宽度和精度的例子 举例 输出 %

  • java字符串与格式化输出的深入分析

    1.String类.StringBuilder类.StringBuffer类String对象是不可变的,重载了运算符+,于是String s="a"+2+"b"+2.2;这条语句就创建了4个String对象对象,把最后创建的对象引用赋给s. 但是String类定义了许多常用的对字符串进行操作的方法:取字符串长度length.判断是否为空串isEmpty.返回字符数组或字节数组toCharArray().取得指定索引的字符charAt().字符串比较equals()c

  • 基于Keras的格式化输出Loss实现方式

    在win7 64位,Anaconda安装的Python3.6.1下安装的TensorFlow与Keras,Keras的backend为TensorFlow.在运行Mask R-CNN时,在进行调试时想知道PyCharm (Python IDE)底部窗口输出的Loss格式是在哪里定义的,如下图红框中所示: 图1 训练过程的Loss格式化输出 在上图红框中,Loss的输出格式是在哪里定义的呢?有一点是明确的,即上图红框中的内容是在训练的时候输出的.那么先来看一下Mask R-CNN的训练过程.Ker

  • Java 格式化输出JSON字符串的2种实现操作

    1 使用阿里的FastJson 1.1 项目的pom.xml依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.58</version> </dependency> 1.2 Java示例代码 (1) 导入的包: com.alibaba.fastjson.JSON; import

  • java字符串格式化输出实例讲解

    代码如果不进行格式化的处理,那么在查阅上会浪费不少的时间.今天我们要说的是字符串的格式化处理,作为基础编程内容,相信大家都字符串都不陌生.我们可以把字符串进行连接,通过这种方法实现格式化的操作.下面我们就格式化的说明.字符串符号图解.实例带来介绍. 1.说明 java 在 JDK1.5 后对 PrintStream 功能进行了扩充,增加了格式化输出功能.直接使用 Print 即可.但是输出的时候需要指定输出的数据类型. 如果不使用格式化输出,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐

  • 使用BigDecimal除法后保留两位小数

    目录 BigDecimal除法后保留两位小数 详细描述 BigDecimal除法异常Non-terminating decimal expansion 异常分析 解决措施 思考 总结 BigDecimal除法后保留两位小数 BigDecimal numBigDecimal=new BigDecimal(5.33); numBigDecimal=ConvertNumber(numBigDecimal,3,2);//调用,5.33/3后保留两位小数1.7766666=1.78 //BigDecima

  • Java BigDecimal基础用法详解

    目录 一.BigDecimal概述 二.BigDecimal常用构造函数 2.1.常用构造函数 2.2.使用问题分析 三.BigDecimal常用方法详解 3.1.常用方法 3.2.BigDecimal大小比较 四.BigDecimal格式化 五.BigDecimal常见异常 5.1.除法的时候出现异常 六.BigDecimal总结 6.1.总结 6.2.工具类推荐 一.BigDecimal概述 一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Do

随机推荐