java中数字的计算事件很烦,也很容易出错的地方,比如网上找来的这样的例子

public class Test {

public static void main(String[] args) {

System.out.println(0.05+0.01);

System.out.println(1.0-0.42);

System.out.println(4.015*100);

System.out.println(123.3/100);

}

}

你觉得他们输出的结果会是多小呢?

0.06 0.58 401.5 1.233

事实是

程序有时候也会给我们开一个玩笑,如果用在金额的计算上将会出现很大的问题。

问题原因呢,当我们用double 、float类型时,计算要千万注意丢失精度的问题。

所以如何计算呢?

BigDecimal进行商业中精度要求较高的计算。

import java.math.BigDecimal;

public class Test {

public static void main(String[] args) {

double a = 0.05;

double b = 0.01;

double c = 1.0;

double d = 0.42;

double e = 4.015;

int f = 100;

String g = "123.3";

// 转成BigDecimal类型,注意new时参数转成String类型

BigDecimal biga = new BigDecimal(Double.toString(a));

BigDecimal bigb = new BigDecimal(Double.toString(b));

BigDecimal bigc = new BigDecimal(Double.toString(c));

BigDecimal bigd = new BigDecimal(Double.toString(d));

BigDecimal bige = new BigDecimal(Double.toString(e));

BigDecimal bigf = new BigDecimal(Double.toString(f));

BigDecimal bigg = new BigDecimal(g);

System.out.println(biga.add(bigb)); // 加法

System.out.println(bigc.subtract(bigd)); // 減法

System.out.println(bige.multiply(bigf)); // 乘法

System.out.println(bigg.divide(bigf)); // 除法

}

}

结果

0.05

0.06

0.58

401.5000

1.233

关于详细的BigDecimal详细的介绍看Java之BigDecimal详解

关于金额的格式化里边也有详细的介绍,计算的精度等(这里推荐看一下银行家舍入算法

)。

java 金额_货币金额的计算 - Java中的BigDecimal相关推荐

  1. java书籍_非科班,自学java需要把软件工程的课程全部学习完吗?

    问题一:非科班是否能自学Java.问题二:自学Java是否需要把软件工程课程全部学完?问题三:如何自学Java? 解决问题一:非科班是否能自学Java.不知道你是否有这个担心疑虑,从事Java技术开发 ...

  2. 灰色模型 java代码_灰色模型的简单Java实现

    前几天在以前的遗留代码中发现一个问题,就是我生成的一个数据的走势曲线的预测值(用于灰色时间序列预测)总是和老代码里的不一致,具体来说就是:遗留代码里面的预测值的斜率总是为零,相比之下我生成的就比较合理 ...

  3. jmeter java性能_使用JMeter进行性能测试(Java请求)

    来源:http://wangym.iteye.com/blog/731729 看了两篇如何使用JMeter在HTTP请求及数据库方面做性能测试的文章(如下两个链接),感受到这款工具的强大及易用.我在这 ...

  4. 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

  5. 有控制雷电武器的java游戏_雷电飞机射击游戏 JAVA

    一.程序概述 1.开发环境 开发程序的工具Eclipse是著名的跨平台的自由集成开发环境.一个开放源代码的.基于Java的课扩展开发平台.就其本身而言,它只是一个框架和一组服务,用与通过插件组件构建开 ...

  6. java获取java版本_在运行时获取Java版本

    最简单的方法(java.specification.version): double version = Double.parseDouble(System.getProperty("jav ...

  7. java基础_笔记(dos,java基础信息,final,static,abstract,接口,抽象类,数组,排序string,stringbuff/stringbuilder)

    一,基础部分 1.1dos命令(也就是cmd命令) exit退出当前dos命令窗口 cls清屏 在dos中复制:直接复制 dir:显示子文件 cd改变目录,切换盘符的直接输入盘符不用cd,不可以跨盘符 ...

  8. 双表查询java代码_什么是JDBC?Java数据库连接性简介

    JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...

  9. java安装_我最喜欢的Java高级开发人员书籍

    java安装 我上一篇博客文章(我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的 "面向高级Java开发人员的十大网站"的启发. Wang ...

最新文章

  1. JDK/JAVA 13正式版发布,此版本带来了以下几大新特性
  2. vue项目在移动端(手机)调试
  3. irrlicht v1.6 例程18 Splitscreen
  4. Excel数据分析实用小技巧【过坑】
  5. TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(一)
  6. html表单input file,最简单的方法美化表单中input type=file元素
  7. 利用redis做次数限制的小结
  8. 阿里云负载均衡SSL证书配置(更新)
  9. Sublime Text 如何连接 FTP/SFTP ——图文详细教程
  10. weblogic 部署应用步骤
  11. 不可错过!普林斯顿陈丹琦最新《大语言模型理解》2022课程!全面讲述BERT、GPT、T5等大模型,附Slides...
  12. 4G-LTE技术总结
  13. RecyclerView实现吸顶效果---ItemDecoration
  14. 《分布式计算云计算与大数据》第一章
  15. 【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning
  16. 如何将ppt改为无法修改的pdf
  17. linux下查看服务器型号
  18. SOA教程之:SOA的优点和缺点
  19. 【Unity连载】斗兽棋-棋类游戏开发演示(2)
  20. python calu_使用Python检查变量是否介于两个值之间

热门文章

  1. pytorch 安卓_兼容PyTorch、TF,史上最灵活Python机器学习框架发布 | 一周AI最火论文...
  2. sqlbulkcopy能用于mysql吗_张家界不锈钢螺旋管能用于造船工业吗?
  3. 灵感|APP夜间模式如何设计?
  4. 万能电商Banner素材模板,一切产品为王
  5. 年底了,各大电商大促会员活动反馈万能模板,必备的PSD分层格式
  6. 优秀APP UI设计作品可以临摹学习,还没灵感就撞墙吧!
  7. c语言中如何让鼠标在一个窗口之外不能点击_Excel系列教程:如何自动填充单元格...
  8. linux设备文件生成,Linux设备文件自动生成(示例代码)
  9. velodyne显示点云中grid的单位_孝感好的舞台背景显示屏施工创新服务_胜辉屏安...
  10. cuSPARSE库:(七)cusparseCreate()的功能与作用