Java水果购买程序数量计算错误问题求助
Java水果商城计算精度问题修复方案
问题原因
程序计算错误的核心是Java整数除法会自动截断小数部分。以苹果的场景为例:
- 代码中
1000/appleprice是两个整数相除,1000/120的实际值是8.333...,但整数除法会直接截断为8 - 后续乘以购买金额
60,得到8*60=480,和预期的500不符
修复方案
将除法运算中的常量改为浮点数(如1000改为1000.0,12改为12.0),强制触发浮点数除法,保留计算精度。
修复后的关键代码片段
以苹果和香蕉的计算为例,其他水果的计算逻辑同理修改:
// 苹果计算修复:用1000.0替代1000,触发浮点数除法 double applequantity = 1000.0 / appleprice * applebuyamount; // 香蕉计算修复:用12.0替代12,触发浮点数除法 double bananaquantity = 12.0 / bananaprice * bananabuyamount;
完整修复代码
import java.util.Scanner; public class FruitShop { public static void main(String[] args) { int appleprice = 120; int bananaprice = 100; int orangeprice = 80; int mangoprice = 110; int grapeprice = 140; int lemonprice = 60; System.out.println("...............................Welcome to Ali Fruit Shop........................."); System.out.println("\n \n These items are available in our shop :"); System.out.println("\n \n1.Apples"); System.out.println("2.Banana"); System.out.println("3.Orange "); System.out.println("4.Mango"); System.out.println("5.Grapes"); System.out.println("6.Lemon"); Scanner scanner = new Scanner(System.in); System.out.println("\n \nEnter Fruit number to buy this fruit :"); int fruitnuminput = scanner.nextInt(); switch(fruitnuminput) { case 1: System.out.println("Apples : Rs."+appleprice+" KG"); System.out.println("\n \n Enter cash amount to buy Apple : "); int applebuyamount = scanner.nextInt(); double applequantity = 1000.0 / appleprice * applebuyamount; System.out.println("You will get :"); System.out.println("Apples : "+applequantity+"Gram"); break; case 2: System.out.println("Banana : Rs."+bananaprice+" Dozen"); System.out.println("\n \n Enter cash amount to buy Banana : "); int bananabuyamount = scanner.nextInt(); double bananaquantity = 12.0 / bananaprice * bananabuyamount; System.out.println("You will get :"); System.out.println("Banana : "+bananaquantity); break; case 3: System.out.println("Orange : Rs."+orangeprice+" KG"); System.out.println("\n \n Enter cash amount to buy Orange : "); int orangebuyamount = scanner.nextInt(); double orangequantity = 1000.0 / orangeprice * orangebuyamount; System.out.println("You will get :"); System.out.println("Orange : "+orangequantity+"Gram"); break; case 4: System.out.println("Mango : Rs."+mangoprice+" KG"); System.out.println("\n \n Enter cash amount to buy Mango : "); int mangobuyamount = scanner.nextInt(); double mangoquantity = 1000.0 / mangoprice * mangobuyamount; System.out.println("You will get :"); System.out.println("Mango : "+mangoquantity+"Gram"); break; case 5: System.out.println("Grapes : Rs."+grapeprice+" KG"); System.out.println("\n \n Enter cash amount to buy Grapes : "); int grapebuyamount = scanner.nextInt(); double grapequantity = 1000.0 / grapeprice * grapebuyamount; System.out.println("You will get :"); System.out.println("Grapes : "+grapequantity+"Gram"); break; case 6: System.out.println("Lemon : Rs."+lemonprice+" KG"); System.out.println("\n \n Enter cash amount to buy Lemon : "); int lemonbuyamount = scanner.nextInt(); double lemonquantity = 1000.0 / lemonprice * lemonbuyamount; System.out.println("You will get :"); System.out.println("Lemon : "+lemonquantity+"Gram"); break; default: System.out.println("Invalid fruit number!"); } scanner.close(); } }
验证效果
输入苹果购买金额60时,计算式变为1000.0/120*60 = 8.333...*60 = 500,完全符合预期结果。
内容的提问来源于stack exchange,提问作者Ali Amin
相关产品推荐
相关产品推荐

