java 金额_货币金额的计算 - Java中的BigDecimal
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相关推荐
- java书籍_非科班,自学java需要把软件工程的课程全部学习完吗?
问题一:非科班是否能自学Java.问题二:自学Java是否需要把软件工程课程全部学完?问题三:如何自学Java? 解决问题一:非科班是否能自学Java.不知道你是否有这个担心疑虑,从事Java技术开发 ...
- 灰色模型 java代码_灰色模型的简单Java实现
前几天在以前的遗留代码中发现一个问题,就是我生成的一个数据的走势曲线的预测值(用于灰色时间序列预测)总是和老代码里的不一致,具体来说就是:遗留代码里面的预测值的斜率总是为零,相比之下我生成的就比较合理 ...
- jmeter java性能_使用JMeter进行性能测试(Java请求)
来源:http://wangym.iteye.com/blog/731729 看了两篇如何使用JMeter在HTTP请求及数据库方面做性能测试的文章(如下两个链接),感受到这款工具的强大及易用.我在这 ...
- 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法
一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...
- 有控制雷电武器的java游戏_雷电飞机射击游戏 JAVA
一.程序概述 1.开发环境 开发程序的工具Eclipse是著名的跨平台的自由集成开发环境.一个开放源代码的.基于Java的课扩展开发平台.就其本身而言,它只是一个框架和一组服务,用与通过插件组件构建开 ...
- java获取java版本_在运行时获取Java版本
最简单的方法(java.specification.version): double version = Double.parseDouble(System.getProperty("jav ...
- java基础_笔记(dos,java基础信息,final,static,abstract,接口,抽象类,数组,排序string,stringbuff/stringbuilder)
一,基础部分 1.1dos命令(也就是cmd命令) exit退出当前dos命令窗口 cls清屏 在dos中复制:直接复制 dir:显示子文件 cd改变目录,切换盘符的直接输入盘符不用cd,不可以跨盘符 ...
- 双表查询java代码_什么是JDBC?Java数据库连接性简介
JDBC(Java数据库连接性)是Java API,用于管理与数据库的连接,发出查询和命令以及处理从数据库获得的结果集.JDBC在1997年作为JDK 1.1的一部分发布,是为Java持久层开发的首批 ...
- java安装_我最喜欢的Java高级开发人员书籍
java安装 我上一篇博客文章(我对高级Java开发人员的十个最喜欢的在线资源)的想法,是由Xiaoran Wang发表的 "面向高级Java开发人员的十大网站"的启发. Wang ...
最新文章
- JDK/JAVA 13正式版发布,此版本带来了以下几大新特性
- vue项目在移动端(手机)调试
- irrlicht v1.6 例程18 Splitscreen
- Excel数据分析实用小技巧【过坑】
- TabActivity,LocalActivityManager,TabHost,TabWidget深度分析(一)
- html表单input file,最简单的方法美化表单中input type=file元素
- 利用redis做次数限制的小结
- 阿里云负载均衡SSL证书配置(更新)
- Sublime Text 如何连接 FTP/SFTP ——图文详细教程
- weblogic 部署应用步骤
- 不可错过!普林斯顿陈丹琦最新《大语言模型理解》2022课程!全面讲述BERT、GPT、T5等大模型,附Slides...
- 4G-LTE技术总结
- RecyclerView实现吸顶效果---ItemDecoration
- 《分布式计算云计算与大数据》第一章
- 【强化学习】手把手教你实现游戏通关AI(2)——Q-Learning
- 如何将ppt改为无法修改的pdf
- linux下查看服务器型号
- SOA教程之:SOA的优点和缺点
- 【Unity连载】斗兽棋-棋类游戏开发演示(2)
- python calu_使用Python检查变量是否介于两个值之间
热门文章
- pytorch 安卓_兼容PyTorch、TF,史上最灵活Python机器学习框架发布 | 一周AI最火论文...
- sqlbulkcopy能用于mysql吗_张家界不锈钢螺旋管能用于造船工业吗?
- 灵感|APP夜间模式如何设计?
- 万能电商Banner素材模板,一切产品为王
- 年底了,各大电商大促会员活动反馈万能模板,必备的PSD分层格式
- 优秀APP UI设计作品可以临摹学习,还没灵感就撞墙吧!
- c语言中如何让鼠标在一个窗口之外不能点击_Excel系列教程:如何自动填充单元格...
- linux设备文件生成,Linux设备文件自动生成(示例代码)
- velodyne显示点云中grid的单位_孝感好的舞台背景显示屏施工创新服务_胜辉屏安...
- cuSPARSE库:(七)cusparseCreate()的功能与作用