赞
踩
数据中所有实数的绝对值不超过1000。
public class main { public static void main(String[] args) { DecimalFormat decimalFormat = new DecimalFormat(); //DecimalFormat类用于格式化BigDecimal的,这里保留两位小数 decimalFormat.applyPattern("0.00"); //商品原价总价 BigDecimal originPrice = new BigDecimal(0); //商品原价原计划折后总价 BigDecimal savePrice = new BigDecimal(0); //满减门槛价格 BigDecimal top = new BigDecimal(0); //将满减价格 BigDecimal save = new BigDecimal(0); boolean flag = true; Scanner in = new Scanner(System.in); Float num = in.nextFloat(); while (num>=0 && in.hasNextFloat()) { BigDecimal a = new BigDecimal(in.nextFloat()); BigDecimal b = new BigDecimal(in.nextFloat()); /** * 输出false情况有三种 * 1、某一项菜品原计划折后总价=0 * 2、某一项菜品原计划折后总价>它的原价 * 3、某一项菜品源计划折后总价=它的原价 */ if(b.compareTo(new BigDecimal(0))==-1 || b.compareTo(a)==1 || b.compareTo(new BigDecimal(0))==0){ flag = false; } //记录最后一行输入(满减门槛价格、将满减价格) if(num == 0){ top = a; save = b; }else{ //如果不是最后一行则累加数据 originPrice = originPrice.add(a); savePrice = savePrice.add(b); } num--; } /* 如果输入信息合法就计算哪一种满减合适 1、判断原价是否达到满减门槛(原价总价=门槛价 || 原价总价大于门槛价) 1.2、三目运算判断原价折后总价和满减折后总价哪个划算 如果输入信息不合法 :输出error */ if(flag){ if(originPrice.compareTo(top)==1 || originPrice.compareTo(top)==0){ BigDecimal bigDecimal = savePrice.compareTo(originPrice.subtract(save))==1 ? (originPrice.subtract(save)) : savePrice; System.out.println(decimalFormat.format(bigDecimal)); }else{ System.out.println(decimalFormat.format(savePrice)); } }else{ System.out.println("error"); } } /** * 简单快速拓展一下DecimalFormat的使用: * BigDecimal a = new BigDecimal(10.0); * BigDecimal b = new BigDecimal(2.53); * log.info(String.valueOf(a.add(b)),"加"); * log.info(String.valueOf(a.subtract(b)),"减"); * log.info(String.valueOf(a.multiply(b)),"乘"); * log.info(String.valueOf(a.divide(b,4, RoundingMode.HALF_UP)),"除"); */ }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。