促销找零 java_找零 - 行动创造奇迹 - BlogJava

blovesaga在一家小超级市场购买一个1.10元棒棒糖,但是他的钱报中都是两块一张的钞票.如果他用一张两块的钞票买这个棒棒糖,那么应该找给他多少零钱呢?

编写一个程序解决这个问题.

code:

class Change

{

public static void main(String[] args)

{

System.out.println(2.00-1.10);

}

}

blovesage写下这段代码我们期望得到应该找回的零钞0.90,但是当运行后他发现数据不兑,运行结果为:0.8999999999999999,与预期的0.90不一样。为什么呢?搞了半天原因在于1.1这个数不能被精确的表示为一个double,因此被表示为最接近它的double值.该程序从2中减去这个值得.遗憾的是,这个结果打印出来并不是接近0.9的double值.这说明: 并不是所有的小数都可以用二进制浮点数精确表示.二进制浮点对于货币计算是非常不适合的.

要解决这个问题有两个办法:一是使用某种整数类型,例如int或long,并且分单位来计算.如下:

System.out.println((200-110)+"fen");

结果为90分.二是使用执行小数运算的BigDecimal.它还可以通过JDBC与SQL DECIMAL类型进行互操作.这里需要注意的是: 一定要用BigDecimal(String)构造器,而千万不要用BigDecimal(double).后一个构造器将用它的参数值来创建一个实例.例如new BigDecimal(.1),它将返回一个BigDecimal,也即0.10000000000000000555111512312578270211815834041015625.正确使用我们就可以得到期望的结果0.90:

code:

import java.math.BigDecimal;

class Change

{

public static void main(String[] args)

{

System.out.println(new BigDecimal("2.00").

subtract(new BigDecimal("1.10")));

}

}

Print:

F:\Java Develop>java Change

0.90

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值