zoukankan      html  css  js  c++  java
  • Java编程,用什么数据类型表示价格?

    在Java中,float和double都表示浮点型数,所表示的浮点数是近似值,而不是精确的值,所以,这两种数据类型不适合作为价格的数据类型。Java语言提供另外一种数据类型BigDecimal,可以用来表示精确的浮点数。

    package com.zhhvip;
    
    import java.math.BigDecimal;
    
    public class Test {
    
        public static void main(String[] args) {
            double d1 = 20.15;
            double d2 = 10.10;
            System.out.println("double类型的运行结果:"+(d1-d2));
    
            BigDecimal bigDecimal1 =  BigDecimal.valueOf(d1);
            BigDecimal bigDecimal2 =  BigDecimal.valueOf(d2);
            System.out.println("BigDecimal类型的运行结果:"+(bigDecimal1.subtract(bigDecimal2)));
    
    //        错误的使用方式
            BigDecimal bigDecimal3 = new BigDecimal(d1);
            BigDecimal bigDecimal4 = new BigDecimal(d2);
            System.out.println("BigDecimal类型错误使用方式的运行结果:"+(bigDecimal3.subtract(bigDecimal4)));
    
    //        正确的使用方式
            BigDecimal bigDecimal5 = new BigDecimal("20.15");
            BigDecimal bigDecimal6 = new BigDecimal("10.10");
            System.out.println("BigDecimal类型正确使用方式的运行结果:"+(bigDecimal5.subtract(bigDecimal6)));
    
        }
    }

    运行结果:

    注意,new 一个BigDecimal时候,只有参数为String类型时候才能够正确表示,为什么BigDecimal.valueOf()又可以呢?因为BigDecimal.valueOf()本质上也是调用了参数类型为String的构造方法。

        public static BigDecimal valueOf(double val) {
            // Reminder: a zero double returns '0.0', so we cannot fastpath
            // to use the constant ZERO.  This might be important enough to
            // justify a factory approach, a cache, or a few private
            // constants, later.
            return new BigDecimal(Double.toString(val));
        }
  • 相关阅读:
    8皇后问题
    求1到n,n个整数的全排列
    求最小周期串
    如何用java完成一个中文词频统计程序
    蛇形矩阵
    第一个算法程序
    java 继承练习题8
    java 继承练习题7
    java 继承练习题6
    java 继承练习题5
  • 原文地址:https://www.cnblogs.com/zhvip/p/12766927.html
Copyright © 2011-2022 走看看