如果您输入
,我当前的程序会制作披萨订单moho
这是中等披萨,橄榄,火腿,橄榄的价格输出应该是:
Medium pizza with,olives,ham,olives,£7.00
但是,我得到了:
Your order is: Medium pizza with,olives,ham,olives,£6.999999999999999
如何制作它以便输出正确的输出?我已经完成了代码,但似乎无法找出原因。
public class pizza {
public static void main(String[] args){
pizzaServiceA();
}
public static void pizzaServiceA(){
Scanner input = new Scanner(System.in);
double total = 0;
System.out.println("Enter order:");
String order = input.next();
String pizza = "Your order is: ";
if (order.equals("quit")){
System.out.println("Program exiting.");
System.exit(0);
}
boolean size = false;
for (int x = 0; x < order.length(); x++){
if (order.charAt(0) == 'm' || order.charAt(0) == 'l'){
if (order.charAt(x) == 'm'){
total +=4.00;
pizza += "Medium pizza with,";
size = true;
}
else if (order.charAt(x) == 'l'){
total +=5.00;
pizza +="Large pizza with,";
}
else if (order.charAt(x) == 'h'){
pizza +="ham,";
if (size) total += 1.40;
else total +=2.10;
}
else if (order.charAt(x)== 'o'){
pizza +="olives,";
if(size) total +=0.80;
else total +=1.20;
}
else if (order.charAt(x)=='p'){
pizza+="pineapple,";
if(size) total +=1;
else total+=1.50;
}
else if (order.charAt(x)=='s'){
pizza+="spinach,";
if(size) total +=0.80;
else total+=1.20;
}
else if (order.charAt(x)=='m'){
pizza +="mozarella,";
if(size) total =+ 1;
else total+=1.50;
}
}
else {
System.out.println("Your first character must be m(medium) or l(large)");
}
}
System.out.println(pizza +"£" + total + "0");
}
}
注意:我理解我可能不会以有效的方式编写此代码,因为我只是Java的初学者而且我正在努力学习。
答案 0 :(得分:2)
这体现了使用二进制浮点类型来表示确切货币价值的陷阱。
为了轻松生活(特别是考虑到你是初学者),请使用整数类型(例如long
)并以便士为中心。
有关详细信息,请参阅Is floating point math broken?
答案 1 :(得分:1)
如果你想尝试脏话:
double total = 651.5176515121351;
total = Math.round(total * 100);
total = total /100;
很多选择:
String result = String.format("%.2f", total );
答案 2 :(得分:0)
有很多方法可以进行舍入等。但是,请查看使用数学库中的BigDecimal的http://www.javaranch.com/journal/2003/07/MoneyInJava.html。希望这会有所帮助。
例如.. src:http://www.javaranch.com/journal/2003/07/MoneyInJava.html - BigDecimal to the Rescue!
import java.text.*;
import java.math.*;
public class addCurrency{
public static void main(String[] args) {
BigDecimal val1 = new BigDecimal("12.52");
BigDecimal val2 = new BigDecimal("17.21");
BigDecimal tot = val1.add(val2);
System.out.println(NumberFormat.getCurrencyInstance().format(tot));
}
}
答案 3 :(得分:0)
public class fungsi_umur {
public static void umur(int tahunlahir, int tahunsekarang) {
int umur = tahunsekarang - tahunlahir;
System.out.print("Masukan umur :");
System.out.print("Masukan nama :");
if (umur <= 12){
System.out.print("Umur Saya = "+umur);
System.out.print("Saya Adalah Anak Anak");
System.out.print("umur<= 12 ");umur(tahunlahir,tahunsekarang);
}else if (umur > 12 && umur <= 18){
System.out.println("Umur Saya = "+umur);
System.out.println("Saya Adalah Remaja");umur(tahunlahir,tahunsekarang);
System.out.print("umur > 12 && umur <= 18");umur(tahunlahir,tahunsekarang);
}else if (umur > 18){
System.out.println("Umur Saya = "+umur);
System.out.println("Saya Adalah Dewasa");umur(tahunlahir,tahunsekarang);
System.out.print("umur > 18");umur(tahunlahir,tahunsekarang);
}
}
public static void main(String[] args) {
}
}