java 价格 类型是_Java编程中,什么数据类型适合用来表示价格?

我在看书时候偶然看到这个问题,我的第一反应:这还用问嘛!!!float和double都可以呀。(这充分说明了我是java初学者。。。)

不过,好学的我,还是想看看答案到底写了个啥。答案如下:

在初学Java的时候,我们知道float和double都表示浮点数。但是由于float和double所表示的浮点数是近似值,不是精确的值,因此,二者不适合作为价格的数据类型。Java语言提供了另外一种数据类型BigDecimal,可以表示精确的浮点数,适合用作财务计算的数据类型。但是需要注意的是,在使用BigDecimal的时候,BigDecimal有多个重载的构造方法能表示精度的值,只有用参数为String类型的构造方法才能表示。

看到此,我还是处于怀疑人生状态。。。

来个例子瞧瞧:

import java.math.BigDecimal;

public class Test {

public static void main(String[] args) {

float d1 = 2.15f;

float d2 = 1.10f;

System.out.println("float类型运算结果:\n" + d1 + "-" + d2 + "=" + (d1 -d2) + "\n");

double d3 = 2.15;

double d4 = 1.10;

System.out.println("double类型运算结果:\n" + d3 + "-" + d4 + "=" + (d3 -d4) + "\n");

BigDecimal bd1 = new BigDecimal("2.15");

BigDecimal bd2 = new BigDecimal("1.10");

System.out.println("BigDecimal,参数为String类型运算结果:\n" + bd1 + "-" + bd2 + "=" + bd1.subtract(bd2) + "\n");

BigDecimal bd3 = new BigDecimal(2.15);

BigDecimal bd4 = new BigDecimal(1.10);

System.out.println("BigDecimal,参数为double类型时运算结果:\n" + bd3 + "-" + bd4 + "=" + bd3.subtract(bd4) + "\n");

}

}float d2 = 1.10f;

System.out.println("float类型运算结果:\n" + d1 + "-" + d2 + "=" + (d1 -d2) + "\n");

double d3 = 2.15;

double d4 = 1.10;

System.out.println("double类型运算结果:\n" + d3 + "-" + d4 + "=" + (d3 -d4) + "\n");

BigDecimal bd1 = new BigDecimal("2.15");

BigDecimal bd2 = new BigDecimal("1.10");

System.out.println("BigDecimal,参数为String类型运算结果:\n" + bd1 + "-" + bd2 + "=" + bd1.subtract(bd2) + "\n");

BigDecimal bd3 = new BigDecimal(2.15);

BigDecimal bd4 = new BigDecimal(1.10);

System.out.println("BigDecimal,参数为double类型时运算结果:\n" + bd3 + "-" + bd4 + "=" + bd3.subtract(bd4) + "\n");

}

}

运行结果:

e6e2a60a32590736d2c971cdebd5a88c.png

呀!!!还真是介个样纸!!!

2bb28bec3a55bd160ee7995347b3e806.png

对于BigDecimal(),

java.math.BigDecimal.BigDecimal(String val)

public BigDecimal(String val) {

this(val.toCharArray(), 0, val.length());

}

public char[] toCharArray() {

char result[] = new char[value.length];

System.arraycopy(value, 0, result, 0, value.length);

return result;

}

java.math.BigDecimal.BigDecimal(double val)  这个函数计算不精确的原因,恐怕还是double惹的祸吧

public BigDecimal(double val) {

this(val,MathContext.UNLIMITED);

}

哎!我还是赶紧把基本数据类型在内存中怎么存储的,好好学学吧!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值