java里 System.out.println(0.0+30/10*0.1); 输出结果为:0.30000000000000004 怎么解决这个精度的问题?
答案:5 悬赏:70
解决时间 2021-02-02 22:06
- 提问者网友:曖昧情执
- 2021-02-02 17:48
java里 System.out.println(0.0+30/10*0.1); 输出结果为:0.30000000000000004 怎么解决这个精度的问题?
最佳答案
- 二级知识专家网友:野性且迷人
- 2021-02-02 17:53
1. 首先java在基本类型计算中高精度会丢失
2. 如果涉及到高精度 需要装换成import java.math.BigDecimal;import java.math.BigInteger;这两个类
3. 代码例子
// System.out.println(0.0+30/10*0.1);
BigDecimal b1 = new BigDecimal(Double.toString(0.0));
BigDecimal b2 = new BigDecimal(Double.toString(30));
BigDecimal b3 = new BigDecimal(Double.toString(10));
BigDecimal b4 = new BigDecimal(Double.toString(0.1));
System.out.println(
b1.add(//加法
b2.divide(//除法
b3.multiply(b4)//乘法
)
)
);//具体点语法百度一下很多
2. 如果涉及到高精度 需要装换成import java.math.BigDecimal;import java.math.BigInteger;这两个类
3. 代码例子
// System.out.println(0.0+30/10*0.1);
BigDecimal b1 = new BigDecimal(Double.toString(0.0));
BigDecimal b2 = new BigDecimal(Double.toString(30));
BigDecimal b3 = new BigDecimal(Double.toString(10));
BigDecimal b4 = new BigDecimal(Double.toString(0.1));
System.out.println(
b1.add(//加法
b2.divide(//除法
b3.multiply(b4)//乘法
)
)
);//具体点语法百度一下很多
全部回答
- 1楼网友:花一样艳美的陌生人
- 2021-02-02 22:25
System.out.println(0.0f+30/10*0.1f);
- 2楼网友:疯山鬼
- 2021-02-02 21:00
可以尝试下用绝对值函数Math.abs(变量-期望值),当输出小于10负n次幂成立时,就认为结果输出正确。
- 3楼网友:余生继续浪
- 2021-02-02 19:31
System.out.printf("%.xlf",0.0+30/10*0.1);
保留x位小数
- 4楼网友:我的任性你不懂
- 2021-02-02 19:13
浮点数在计算的时候不可避免的会有这个问题,float由于精度太低一般时候效果不明显,也基本不使用float。遇到这种情况一般有两种方法
System.out.println(0.0+30*0.1/10);(尝试交换先乘后除,此法不严谨)
可以适用java.math.BigDecimal 这个类进行计算。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯