Java double转bigDecimal时精度丢失问题

news/2024/6/18 21:44:10 标签: java

使用new BigDecimal(double val)对doubel进行转换会导致转换后精度丢失

原因

BigDecimal的构造函数public BigDecimal(double val)会损失了double 参数的精度。jdk中已经明确不建议使用new BigDecimal(double value)这种形式的构造函数,而是使用new BigDecimal(Stringvalue) 或BigDecimal.valueof( double value)。

测试代码

java">        for (int i = 1; i < 100; i++){
            String str = i < 10? "0.0" + i: "0." + i;
            BigDecimal b1 = BigDecimal.valueOf(Double.valueOf(str));
            BigDecimal b2 = new BigDecimal(Double.valueOf(str));
            System.out.println("new BigDecimal(double val):  " + b1 + "        " + b1.doubleValue() + "          " + Double.valueOf(str));
            System.out.println("-----------------------");
            System.out.println("BigDecimal.valueof(double value): " + b2 + "        " + b2.doubleValue() + "          " + Double.valueOf(str));
            System.out.println("-----------------------");
        }

测试结果

在这里插入图片描述


http://www.niftyadmin.cn/n/860389.html

相关文章

集合栈计算机(详细解答)UVa12096

题目: 有一个专门为了集合运算而设计的“集合栈”计算机。该机器有一个初始为空的栈&#xff0c;并且支持以下操作&#xff1a; PUSH&#xff1a;空集“{}”入栈 DUP&#xff1a;把当前栈顶元素复制一份后再入栈 UNION&#xff1a;出栈两个集合&#xff0c;然后把两者的并集入栈…

vue根据权限动态生成路由

vue根据权限动态生成路由 import store from /store // vuex import router from /router // router import axios from ./request // axios // 存放页面信息 const data [// { // 主菜单// path: /okkk, // 页面路径// name: okkk, // 名称// component: () > impo…

团体队列(模拟)

题目: 团体队列题目 思路: 这是一道模拟题,通过map,和两个queue完成,具体细节大家看代码注释,找清楚之间的关系就好。 #include <bits/stdc.h> using namespace std; const int maxt100010;//最多团队数int main() {int t,kcase0;//读入t个团while(scanf("%d"…

丑数-优先队列(详细解答)

题目: 丑数是一些因子只有2,3,5的数。数列1,2,3,4,5,6,8,9,10,12,15……写出了从小到大的前11个丑数&#xff0c;1属于丑数。现在请你编写程序&#xff0c;找出第1500个丑数是什么。 输出&#xff1a;The 1500’th ugly number is <…>.&#xff08;<…>为你找到的…

Unix Is命令(UVa 400)详细解答

题目: 输入正整数n 以及n 个文件名&#xff0c;排序后按列优先的方式左对齐输出。假设最长文件名有M 字符&#xff0c;则最右边有M 字符&#xff0c;其他列都是M2 字符。 题目分析: 有n个文件名,其中最长的文件名有M个字符,一下面输入为例,最长的是Mr._French(共有10个字符),然…

超级楼梯(递推)

题目: 有一楼梯共M级&#xff0c;刚开始时你在第一级&#xff0c;若每次只能跨上一级或二级&#xff0c;要走上第M级&#xff0c;共有多少种走法&#xff1f; 输入: 输入数据首先包含一个整数N&#xff0c;表示测试实例的个数&#xff0c;然后是N行数据&#xff0c;每行包含一…

铺方格(升级版递推)详细解答

题目: 有一个大小是2xN的网格,现在需要用2种规格的骨牌铺满,骨牌的规格分别是2x1和2x2,请计算一共有多少铺设的方法。(从左向右铺) 输入: T组数据,N网格列数 (0<N<50) 输出: 所有方案m Sample Input 1 3 2 Sample Output 1 5 3 解题思路: 这道题和超级楼梯有异曲同工…

LIS最长上升子序列

LIS:从一串数字序列,找出连续递增的子序列,并且要求子序列最长! 举例: 一段序列:1,6,2,3,7,5,9,4,11 最长上升子序列为:1,2,3,7,9,11 那么我们如何通过代码实现呢? 我们需要一个数组f,然后通过f记录每一个数字的最大上升子序列。 初始时每一个f[i]1,因为那怕找不到任意一个子…