我正在编写下面的程序。当totalCostPerMiles
是int
,numMiles
和milesPerGallon
是doubles
,price
是int
时,如何计算totalCostPerMiles = (numMiles / milesPerGallon) * price;
以获得计算值?
假设milesPerGallon = 30;
、numMiles = 15;
和price = 400;
。
我需要numMiles / milesPerGallon
输出0.5而不是0,totalCostPerMiles
输出200以代替0。
所有存储测量值的变量必须是双变量,所有存储货币值的变量都必须是整数。
import java.util.Scanner;
public class RoadTrip {
public static void main(String[] args) {
int price, budgetPrice,
priceInDollars, priceInCents, priceInDollarsBudget, priceInCentsBudget,
totalCostPerMiles, dollars, cents;
double milesPerGallon, numMiles, totalMilePerGall;
Scanner stdin = new Scanner(System.in);
milesPerGallon = stdin.nextDouble();
numMiles = stdin.nextDouble();
price = stdin.nextInt();
budgetPrice = stdin.nextInt();
totalCostPerMiles = (numMiles / milesPerGallon) * price; //produces error
数学运算总是二进制的(因此,有两个参数。"a+b+c"不是三元加法;它是(a+b)+c
-2嵌套二进制运算的简写。
如果二进制运算的任意一侧是双精度,则首先将另一个数字(int、long、float、byte、char、short,无关紧要(转换为双精度,然后完成运算,结果为双精度。
因此,(numMiles / milesPerGallon)
是一个double类型的表达式。
然后,你这样做(所以,一个双精度(,乘以一个int:that * price
。price是一个int,但double*int
是通过首先将该int转换为double来完成的。因此,整个结果本身就是一个二重。
然后,您尝试将其分配给int,这就是问题发生的地方:您不能这样做,因为java不知道您想要什么。6.5
应该变成6还是7?1.239e123
呢?
你可以选择做什么。最简单的方法是"四舍五入"模式,它会使分数倾斜(所以,向下四舍五舍五入……除非数字是负数,在这种情况下,它会向上四舍五进(:
totalCostPerMilis = (int) ((numMiles / milesPerGallon) * price);
您甚至可以使用它并使用不同的舍入选项:将0.5添加到混合中,现在它是四舍五入到最接近的值,x.5
向上取整。
其他物质可以用例如CCD_ 21找到。