java处理高精度的商业计算
来源:互联网 发布:countdown软件 编辑:程序博客网 时间:2024/05/17 08:09
在公司写代码时,发现从mongodb中取出高精度数据时,会自动转成科学计数法!例如数据库里存的是`0.0002`,取出来时,变成了2.0E-4.对于这种高精度的数据,一般要用到BigDecimal类。一般我们都是保留两位小数,但是如上例中,`0.0002`我们希望保留的有效位,是从非0位2开始的。我们该怎么写呢?
double a = 0.0002; BigDecimal b = new BigDecimal(String.valueOf(a)); BigDecimal divisor = BigDecimal.ONE; MathContext mc = new MathContext(2); System.out.println(b.divide(divisor, mc));
上面代码的意思:用一个`BigDecimal`对象除以`divisor`后的结果,并且要求这个结果保留有mc个小数位。其中`BigDecimal.ONE`的值就是1。(0.0002/1保留2位有效小数)尽量使用参数类型为String的构造函数。这里要说明下:不要写成这样:
double a = 0.0002; BigDecimal b = new BigDecimal(String.valueOf(a));BigDecimal setScale = bigDecimal.setScale(2);System.out.println(setScale);
这样会保存会报错,因为它的保存方式不会去管,小数点后面的开始位是不是为0。假设它强行截取得话(我们假设它不报错),就变成了0.00。就更不对啦网上参考信息:方法一:scale指的是你小数点后的位数。比如123.456则score就是3.score就是BigDecimal类中的方法啊。你自己定义一个BigDecimal的对象调用一下就可以验证。比如:BigDecimal b = new BigDecimal("123.456");b.scale(),返回的就是3.方法二:roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,你可以看一下,有很多种。比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。`pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)`的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的,你可以自己选!如果我们后台不转换的话,放到前台转也可以的。前台使用Number(),就可以把科学计数表示法转成正式显示
参考地址
http://bbs.csdn.net/topics/360022861
http://blog.csdn.net/jackiehff/article/details/8582449
http://blog.csdn.net/wangxy799/article/details/51769251
1 0
- java处理高精度的商业计算
- java 处理高精度计算
- java 处理高精度计算
- 商业计算中Java高精度计算BigDecimal类
- 商业计算中Java高精度计算BigDecimal类
- 商业计算中Java高精度计算BigDecimal类
- java 处理高精度计算问题
- java的高精度计算
- java使用BigDecimal 处理商业精度及高精度详解
- Java 使用BigDecimal类处理高精度计算
- 关于高精度正整数计算的JAVA实现
- Java和Js的高精度计算
- java计算高精度数据
- php 处理高精度计算函数
- php 处理高精度计算函数
- N!的位数 【java 高精度处理】
- 二进制的高精度计算
- 高精度幂的计算
- js递归的优化(尾递归)
- UE4 Character旋转
- 排序算法(四) 插入排序
- [深度学习论文笔记][Image Classification] Human Performance
- javascript cookies 存、取、删除实例
- java处理高精度的商业计算
- 标准文件IO和系统文件IO的区别
- 使用Hadoop时出现的问题
- Xcode8模拟器警告与iOS10真机调试NSLog无效
- 透明度和对应的16进制值
- 成也android:process败也android:process
- php中预定义的超全局数组变量
- gitlab ce centos 6
- Xcode 8带来的新特性和坑