我编写代码来测试方法,显示食物和价格:
import java.util.Scanner;
public class JavaTutorial5Class {
public static void main(String[] args)
{
greeting("Thunderdome");
prices("Fatburger", 7.50);
}
static void greeting(String restaurant)
{
System.out.println("Welcome to " + restaurant);
}
static void prices(String burger, double price){
System.out.print(burger + " is " + "$" + price);
//System.out.println(Math.ceil(price % 10));
if (Math.ceil(price % 10) == 8.0){
System.out.print("0");
}
}
}为什么是price % 10 == 8.0?你真的需要这样做才能得到尾数0吗?
编辑:所有这段代码应该做的是打印"Fatburger is $ 7.50“问题是,简单地给它参数7.50就会把它转换成7.5。
发布于 2012-09-11 03:33:14
在这段代码中,您得到8.0的原因是因为您使用了Math.ceil。
7.5 % 10是7.5,Math.ceil(7.5)是8.0。
然而,这是非常经常出现的事情,也是初学者非常常见的错误……价格几乎不应该以双倍的形式存储。Double算术并不总是像您期望的那样精确,主要是因为Double的实际存储方式。例如,考虑以下内容:
double sum = 0.0;
int n = 6;
for (int i = 0; i < n; i++) {
sum += 1.0 / n;
}
System.out.println(sum);您可能希望它输出1.0,但实际上它输出的是0.9999999999999999
处理价格的正确方法是使用两个int:一个表示美元,另一个表示美分。
发布于 2012-09-11 03:32:01
试着这样做:
static void prices(String burger, double price){
System.out.print(burger + " is $" + price);
if ((int)(price * 10) == price * 10)
System.out.print(0);
}现在,7.5 % 10只返回7.5,Math.ceil将其向上舍入为8.0。
发布于 2012-09-11 03:33:01
价格% 10实际上是7.5。模是除法的余数(或一个数字可以容纳另一个数字的次数)。例如,22 % 10是2,因为10可以放入22中两次,而不需要超过。取上限,将其提高到最接近的整数,将7.5提高到8。因此if语句的结果为true。
https://stackoverflow.com/questions/12358154
复制相似问题