5.8 BigDecimal类

  双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。表5.7中列出了BigDecimal类的主要构造器和方法。

  表5.7 BigDecimal类的主要构造器和方法

  构 造 器描 述

  BigDecimal(int)创建一个具有参数所指定整数值的对象。

  BigDecimal(double)创建一个具有参数所指定双精度值的对象。

  BigDecimal(long)创建一个具有参数所指定长整数值的对象。

  BigDecimal(String)创建一个具有参数所指定以字符串表示的数值的对象。

  续表

  方 法描 述

  add(BigDecimal)BigDecimal对象中的值相加,然后返回这个对象。

  subtract(BigDecimal)BigDecimal对象中的值相减,然后返回这个对象。

  multiply(BigDecimal)BigDecimal对象中的值相乘,然后返回这个对象。

  divide(BigDecimal)BigDecimal对象中的值相除,然后返回这个对象。

  toString()将BigDecimal对象的数值转换成字符串。

  doublue()将BigDecimal对象中的值以双精度数返回。

  floatValue()将BigDecimal对象中的值以单精度数返回。

  longValue()将BigDecimal对象中的值以长整数返回。

  intValue()将BigDecimal对象中的值以整数返回。

  注意,由于一般数值类型,例如double,不能准确地代表16位有效数以上的数字,在使用BigDecimal时,应用BigDecimal(String)构造器创建对象才有意义。另外,BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。

  构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。关于构造器概念和编写技术,将在本书第6章详细介绍。

  下面讨论BigDecimal的一些常用例子:

 //完整程序例子在本书配套资源目录Ch5中名为BigDecimalTestApp.Java
  //创建BigDecimal对象
  BigDecimal bigNumber = new BigDecimal("89.1234567890123456789");
  BigDecimal bigRate = new BigDecimal(1000);
  BigDecimal bigResult = new BigDecimal(); //对象bigResult的值为0.0
  //对bigNumber的值乘以1000,结果 赋予bigResult
  bigResult = bigNumber.multiply(bigRate);
  System.out.println(bigResult.toString());
  //或者System.out.println(bigResult);
  //显示结果:89123.4567890123456789000
  //以双精度数返回bigNumber中的值
  double dData = bigNumber.doublue();
  System.out.println(dData); //结果:89.12345678901235

  注意使用方法doublue()将对象bigNumber中的值以双精度数值返回时,将丢失数据的准确性。使用其他方法,如xxxValue()时均存在这个问题,使用时必须慎重。

  <!--[if !vml]--><!--[endif]-->3W BigDecimal用来对超过16有效位以上的数值进行运算和操作。所有的算术运算都通过调用其相应的方法进行。创建一个超过16有效位数的对象时,运用BigDecimal(String)才可避免丢失数字的精确度。

  5.9 BigDecimal和格式化

  由于NumberFormat类的format()方法可以使用BigDecimal对象作为其参数,可以利用BigDecimal对超出16位有效数字的货币值,百分值,以及一般数值进行格式化控制。

java四舍五入
2009-06-20 16:11

package Test;

import java.math.BigDecimal; //引入这个包

public class Test {
public static void main(String[] args) {

double i = 3.856;

// 舍掉小数取整
   System.out.println("舍掉小数取整:Math.floor(3.856)=" + (int) Math.floor(i));

// 四舍五入取整
   System.out.println("四舍五入取整:(3.856)="
     + new BigDecimal(i).setScale(0, BigDecimal.ROUND_HALF_UP));

// 四舍五入保留两位小数
   System.out.println("四舍五入取整:(3.856)="
     + new BigDecimal(i).setScale(2, BigDecimal.ROUND_HALF_UP));

// 凑整,取上限
   System.out.println("凑整:Math.ceil(3.856)=" + (int) Math.ceil(i));

// 舍掉小数取整
   System.out.println("舍掉小数取整:Math.floor(-3.856)=" + (int) Math.floor(-i));
   // 四舍五入取整
   System.out.println("四舍五入取整:(-3.856)="
     + new BigDecimal(-i).setScale(0, BigDecimal.ROUND_HALF_UP));

// 四舍五入保留两位小数
   System.out.println("四舍五入取整:(-3.856)="
     + new BigDecimal(-i).setScale(2, BigDecimal.ROUND_HALF_UP));

// 凑整,取上限
   System.out.println("凑整(-3.856)=" + (int) Math.ceil(-i));

转载于:https://blog.51cto.com/lbhappy1990/782235

如何应用Java的BigDecimal类相关推荐

  1. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  2. Java中BigDecimal类介绍及用法

    Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...

  3. java.math.BigDecimal类multiply的使用

    java.math.BigInteger.multiply(BigInteger val) 返回一个BigInteger,其值是 (this * val). 声明 以下是java.math.BigIn ...

  4. Java中BigDecimal类常用方法,舍入策略

    标题 Java BigDecimal 的舍入模式 (RoundingMode)详解 提一下银行家算法 BigDecimal和BigInteger Java中BigDecimal常用方法 BigDeci ...

  5. Java中BigDecimal类的使用方法详解,常用最全系列!

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.对于Double类型的运算,通常使用此类处理,来有效避免精度问题. 下面,我们从五个功能点 ...

  6. java bigdecimal赋值_Java中BigDecimal类介绍及用法(亲测)

    Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...

  7. Java常用类(5)--不可变的任意精度BigInteger、BigDecimal类

    文章目录 BigInteger类 BigDecimal类 BigInteger类 Integer类作为int的包装类,能存储的最大整型值为2^31-1,Long类也是有限的, 最大为2^63-1.如果 ...

  8. Java快速入门到精通—大数字运算(BigDecimal 类)

    在Java中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中BigInteger 类是针对整型大 ...

  9. 4、大数字运算(BigInteger类和BigDecimal类)

    在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger 类和 java.math.BigDecimal 类.这两个类用于高精度计算,其中 BigInteger 类是针对 ...

最新文章

  1. 燃烧青春和诗意的IT人生
  2. sstream应用举例
  3. 10岁才上小学的他,如今是高校男神教授
  4. 一种基于随机投影的本地差分隐私高维数值型数据收集算法
  5. 漫步数理统计二十一——变换:随机向量
  6. 【Flink】Failed to create checkpoint storage at checkpoint coordinator side
  7. WEB程序调用客户端程序
  8. CryptoQuant CEO:OKEx暂停提款对比特币价格影响不大
  9. Baidu - Echarts 地图实例测试,并绘制平滑圆弧路径
  10. fcntl函数的作用及应用场景
  11. 百度网盘 自定义分享密码 提取码
  12. linux表示虚拟字符终端,终端,控制台,虚拟终端分别指什么
  13. HTML实现简单水平导航栏
  14. Java 程序员常用资源网站集合
  15. 计算机专业必须用英语口语要求,哪些专业需要英语口语考试
  16. oracle+linux+oel+6.9,Oracle 11g(11.2.0.4) install on OEL6.7
  17. 史上最全面聊天机器人总结(图灵、思知、小i、小微)
  18. 从甲方转变为乙方,工作心态的转变
  19. 五大常用算法之四:分治法
  20. 【读书笔记】自卑与超越

热门文章

  1. .Net Core使用视图组件(ViewComponent)封装表单文本框控件
  2. 详细聊聊k8s deployment的滚动更新(二)
  3. Android规范发展
  4. 谷歌官方扩展UI组件---SlideTabLayout
  5. Python Challenge-Level 1
  6. Windows7操作系统自定义运行命令(简单方法之二)
  7. C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】
  8. photoshop修复面部的皱纹
  9. WordPress 设置图片的默认显示方式(尺寸/对齐方式/链接到)
  10. button 去掉原生边框