中易网

java里 System.out.println(0.0+30/10*0.1); 输出结果为:0.30000000000000004 怎么解决这个精度的问题?

答案:5  悬赏:70  
解决时间 2021-02-02 22:06
java里 System.out.println(0.0+30/10*0.1); 输出结果为:0.30000000000000004 怎么解决这个精度的问题?
最佳答案
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)//乘法
             )
          )
   );//具体点语法百度一下很多
全部回答
System.out.println(0.0f+30/10*0.1f);
可以尝试下用绝对值函数Math.abs(变量-期望值),当输出小于10负n次幂成立时,就认为结果输出正确。
System.out.printf("%.xlf",0.0+30/10*0.1); 保留x位小数
浮点数在计算的时候不可避免的会有这个问题,float由于精度太低一般时候效果不明显,也基本不使用float。遇到这种情况一般有两种方法 System.out.println(0.0+30*0.1/10);(尝试交换先乘后除,此法不严谨) 可以适用java.math.BigDecimal 这个类进行计算。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
昆康地址在哪,我要去那里办事
广西南宁的音乐学校在那
国家规定高速驾车一天跑公里多少
怎样识别飞机票各航空公司
在ERDAS中怎么进行灰度密度分割
太阳陶瓷在哪里啊,我有事要去这个地方
谁可以借我玩一个海岛奇兵的号
dxdiag.chm文件删除掉了,怎么办!急
鸿雁 词语
佳能3万元左右的相机有什么型号
贵友食府地址有知道的么?有点事想过去
厂房大门朝西南偏南好吗
关于会计与税法的差异分析的论文提纲,谢谢了!
肥猪现在九元一斤了以后还能不能长价了?
食品可不可以申请专利
推荐资讯
女友名字叫巧林,求大神编首藏头诗,围绕喜欢
20014护士考编要看什么书是三基还是护理?
有多少国家参加奥运会
美版手机加86多收费吗
闫梁庄地址有知道的么?有点事想过去
报到证到手后应该怎么办?
加个固态硬盘会提升游戏流畅度吗
城市客栈(深圳龙岗老街店)怎么去啊,有知道地
请问国外的护照不小心跟衣服放进洗衣机里洗,
一桶水多重?
独山镇张福村村民委员会地址在什么地方,想过
Yoyo美甲屋在哪里啊,我有事要去这个地方
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?