我是靠谱客的博主 鲜艳飞机,最近开发中收集的这篇文章主要介绍关于 BigDecimal处理float、double数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

                           Big Decimal

    在java中,对于float与double中的数据,总会因为精度问题而丢失数据的准确性,也就是说对于两者所处理的得到的值是无限接近于那个数,而并非一个精确数字,而对于电商中所涉及到的关于浮点型与double型数据,并且数据又得要求是准确性,又该如何处理呢?这里,必须用到Big Decimal!

一、先看代码:

(一)

@Test
public void test1(){
        System.out.print(0.05+0.01);
        System.out.print(1.0-0.42);      
        System.out.print(4.015*100);
        System.out.print(123.3/100);
}

结果:

(二)

@Test
public void test2(){
       BigDecimal b1=new BigDecimal(0.05);
       BigDecimal b2=new BigDecimal(0.01);
       System.out.println(b1.add(b2));    

}

结果:

(三)

@Test
public void test2(){
       BigDecimal b1=new BigDecimal(“0.05”);
       BigDecimal b2=new BigDecimal("0.01");
       System.out.println(b1.add(b2));    

}

结果:

总结:

floatdouble只能用在科学计算和工程计算

如果是商业计算,必须用big Decimal

所以说在使用big Decimal时,必须使用它的string构造器,否则会出现严重精度丢失问题

当然,查看BigDecimal的源代码,从中也说明必须使用它的String构造器:

 

  * When a {@code double} must be used as a source for a
     * {@code BigDecimal}, note that this constructor provides an
     * exact conversion; it does not give the same result as
     * converting the {@code double} to a {@code String} using the
     * {@link Double#toString(double)} method and then using the
     * {@link #BigDecimal(String)} constructor.  To get that result,
     * use the {@code static} {@link #valueOf(double)} method.
     * </ol>
     *
     * @param val {@code double} value to be converted to
     *        {@code BigDecimal}.
     * @throws NumberFormatException if {@code val} is infinite or NaN.
     */
    public BigDecimal(double val) {
//一下省略
}

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/cailijia52o/p/8571217.html

最后

以上就是鲜艳飞机为你收集整理的关于 BigDecimal处理float、double数据的全部内容,希望文章能够帮你解决关于 BigDecimal处理float、double数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部