博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java编程中,什么数据类型适合用来表示价格?
阅读量:4211 次
发布时间:2019-05-26

本文共 2160 字,大约阅读时间需要 7 分钟。

我在看书时候偶然看到这个问题,我的第一反应:这还用问嘛!!!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");	}}

运行结果:

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

对于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);    }

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

 

你可能感兴趣的文章
Oracle 11g 新特性 -- 自动诊断资料档案库(ADR) 说明
查看>>
Oracle 11g 新特性 -- RMAN Data Recovery Advisor(DRA) 说明
查看>>
CSDN博客之星 投票说明
查看>>
Oracle wallet 配置 说明
查看>>
Oracle smon_scn_time 表 说明
查看>>
VBox fdisk 不显示 添加的硬盘 解决方法
查看>>
Secure CRT 自动记录日志 配置 小记
查看>>
RMAN RAC 到 单实例 duplicate 自动分配通道 触发 ORA-19505 错误
查看>>
mysql 随机分页的优化
查看>>
DB2快速创建测试库
查看>>
利用db2look查看ddl
查看>>
java中的mmap实现
查看>>
Redis的Aof被阻塞原因调查
查看>>
Redis Cluster的FailOver失败案例分析
查看>>
Android Alarm驱动源代码分析(Alarm.c)
查看>>
S3C2440上LCD驱动 (FrameBuffer)实例开发讲解
查看>>
Linux音频编程指南
查看>>
usb-otg-调试心得
查看>>
USB规范浏览--设备和主机规范
查看>>
男人的品位--我们自己的最求
查看>>