博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
常用的数学运算以及格式化
阅读量:6046 次
发布时间:2019-06-20

本文共 1921 字,大约阅读时间需要 6 分钟。

3.求a的b次幂:Math.pow();

public static double pow(double a, double b)

pow是power的缩写。power的意思是幂。

与之容易混淆的是a<<b,表示的是a*(2的b次方)。

5.四舍五入取整:Math.round();

public static int round(float a) public static long round(double a)

注意,float型取整后是int型,而double取整后是long型。

6.浮点数格式化,保留n位小数。自己封装方法,要用到DecimalFormat类,这个类是专门用来格式化小数的,decimal就是小数的意思

/** *  * 把一个浮点数四舍五入保留n位小数 *  * @param a * @param n * @return double */ public static double numberKeepN(double a, int n) { String pattern = "0."; for (int i = 0; i < n; i++) { pattern = pattern + "0"; } DecimalFormat df = new DecimalFormat(pattern); String value = df.format(a); double k = Double.valueOf(value); return k; } /** * * 整数a、b相除,保留n位小数 * * @param a * @param b * @param n * @return */ public static double dividKeepN(long a, long b, int n) { String pattern = "0."; for (int i = 0; i < n; i++) { pattern = pattern + "0"; } DecimalFormat df = new DecimalFormat(pattern); String value = df.format((double) a / b); double k = Double.valueOf(value); return k; }

需要注意的是,整数和浮点数进行运算可能会丢失精度,得到的结果与期望值不符,比如

double a = 0.5755;double b = 100 + a;double c = 100 - a;double d = 100 * a;double e = 100 / a;System.out.println(b);// 100.5755System.out.println(c);// 99.4245System.out.println(d);// 57.550000000000004System.out.println(e);// 173.7619461337967

本来100*0.5755应该等于57.55的,但结果却是57.550000000000004,令人大吃一惊!

如果要对浮点数进行运算的话,应该用BigDecimal类。

得到一个BigDecimal实例的方式有两种:

用BigDecimal(String val)构造器,例如

BigDecimal decimal1 = new BigDecimal("0.5755");

注意,不要用BigDecimal(double val),这个构造器可能产生意想不到的问题。

或者用BigDecimal的静态方法BigDecimal.valueOf(double val),例如

BigDecimal decimal2 = BigDecimal.valueOf(100);

这样就可以调用BigDecimal的API进行浮点数的加减乘除运算了,如:

BigDecimal decimal3 = decimal1.multiply(decimal2);System.out.println(decimal3);// 57.5500

之后再用BigDecimal的doubleValue()或者toString()方法得到double类型值或者浮点数格式的字符串,然后再根据需求格式化即可:

double d3 = decimal3.doubleValue();d3 = (numberKeepN(d3, 1));

转载于:https://www.cnblogs.com/koushr/p/5873436.html

你可能感兴趣的文章
【性能优化】quicklink:实现原理与给前端的启发
查看>>
R.Swift高效引用资源文件
查看>>
从贺老微博引出的“遍历器(Iterators)加速那些奥秘”
查看>>
微信小程序 canvas圆角矩形的绘制
查看>>
# 每天阅读一个 npm 模块(8)- koa-route
查看>>
仅需四步,即可体验 Service Worker 带来的快感
查看>>
微服务实战(golang)
查看>>
[译] TC39,ECMAScript 和 JavaScript 的未来(Part 1)
查看>>
cmake使用教程(五)-cpack生成安装包
查看>>
安全研究 | Jenkins 任意文件读取漏洞分析
查看>>
[译] Javascript 中多样的 this
查看>>
100年后的编程是什么样子的?(上)
查看>>
Docker 使用指南 (1)—— 基本操作
查看>>
从时间旅行的乌托邦,看状态管理的设计误区
查看>>
你是“最佳实践”的受害者吗
查看>>
Go 自带的 http/server.go 的连接解析 与 如何结合 master-worker 并发模式,提高单机并发能力...
查看>>
阿里云黄海宇:窄带高清2.0——让直播更惊艳的魔术
查看>>
使用webpack4搭建一个基于Vue的组件库
查看>>
4. PHP运算符、判断语句、循环语句
查看>>
使用第三方平台监控线上项目代码错误
查看>>