java double 四舍五入_关于java double类型四舍五入的算法

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 17:23   1456   0

展开全部

这是为什么呢?//double类型62616964757a686964616fe58685e5aeb931333337626131直接转换成为BigDecimal还是会造成精度丢失

解决方案//把double类型首先转换为String类型, 然后再把String类型转换成BigDecimal类型

实例代码import java.math.BigDecimal;

public class B {

public static void main(String[] args) {

print0();

print1();

print2();

print3();// 解决方案

}

private static void print0() {

double d = 12345.15;

BigDecimal b = new BigDecimal(d);

System.out.println(b);

double d1 = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue();

System.out.println(d1);

}

private static void print1() {

double d = 1234.115;

BigDecimal b = new BigDecimal(d);

System.out.println(b);

double d1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

System.out.println(d1);

}

private static void print2() {

double d = 2345.115;

BigDecimal b = new BigDecimal(d);

System.out.println(b);

double d1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

System.out.println(d1);

}

private static void print3() {

double d = 2345.115;

BigDecimal b = new BigDecimal(String.valueOf(d));//方案一

//BigDecimal b = new BigDecimal("2345.115");//方案二

//BigDecimal b = new BigDecimal(""+d);//方案三

System.out.println(d);

double d1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();

System.out.println(d1);

}

}

输出12345.149999999999636202119290828704833984375

12345.1 //四舍五入 保留1位

1234.115000000000009094947017729282379150390625

1234.12 //四舍五入 保留2位

2345.114999999999781721271574497222900390625

2345.11 //四舍五入 保留2位

2345.115

2345.12 //四舍五入 保留2位

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP