收银找零程序(Java)
首先介绍一个踩坑答案。
请用 java 实现如下描述流程:你买了价值 1.1 元的东西,你给收银员 2.0 元钱,收银员找你 0.9 元。
double total = 2.0;
double used = 1.1;
double result = total - used;
System.out.print(result);
得到的结果是 0.8999999999999999,因为JAVA中的浮点型运算只得到近似值。所以这是一道经验踩坑题,为得到精确结果,需要调用 JAVA 在 java.math 包中提供的 BigDecimal 处理,因为 float 和 double 只能用来做科学计算或者工程计算,在商业计算中要用java.math.BigDecimal
。
假设找零的人民币面值为50元,20元,10元,5元,1元,5角,1角。
package change;
import java.math.BigDecimal;
public class Main
{
public static void main(String[] args)
{
BigDecimal in = new BigDecimal("2.0");
BigDecimal fact = new BigDecimal("1.1");
BigDecimal sub = in.subtract(fact); // BigDecimal求差
String out = sub.toString(); // BigDecimal转String
String[] s = out.split("\\."); // 整数和小数分离
int integer = Integer.parseInt(s[0]); // 整数部分
int decimal = Integer.parseInt(s[1]); // 小数部分
int a = integer / 50;
int b = (integer % 50) / 20;
int c &#