Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当两个Double除法并将Double商乘以Int时,如何将Double转换为Int?_Java - Fatal编程技术网

Java 当两个Double除法并将Double商乘以Int时,如何将Double转换为Int?

Java 当两个Double除法并将Double商乘以Int时,如何将Double转换为Int?,java,Java,我正在做下面的程序。如何计算totalCostPerMiles=(numMiles/milesPerGallon)*价格当totalCostPerMiles是int时,numMiles和milesPerGallon是的两倍,并且price是int以获得计算值 假设milesPerGallon=30,numMiles=15,且价格=400 我需要numMiles/milesPerGallon输出0.5而不是0,并且totalCostPerMiles输出200而不是0 存储测量值的所有变量必须是双精

我正在做下面的程序。如何计算
totalCostPerMiles=(numMiles/milesPerGallon)*价格
totalCostPerMiles
int
时,
numMiles
milesPerGallon
的两倍,并且
price
int
以获得计算值

假设
milesPerGallon=30
numMiles=15,且
价格=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


数学运算总是二进制的(因此,2个参数。'a+b+c'不是3路加法;它是
(a+b)+c
-2嵌套二进制运算的简写

如果二进制运算的任何一个“边”是双精度的,那么首先将另一个数字(int、long、float、byte、char、short,无所谓)转换为双精度,然后完成运算,结果是双精度的

因此,
(numMiles/milesPerGallon)
是double类型的表达式

然后,你用一个整数乘以一个整数:
that*price
。price是一个整数,但是
double*int
是通过首先将该整数转换成一个double来完成的。因此,整个结果本身就是一个double

然后尝试将其分配给int,这就是问题所在:您不能这样做,因为java不知道您想要什么。应该将
6.5
变为6还是7?那么
1.239e123

你可以选择要做什么。最简单的方法是“舍入舍入”模式,即舍入分数(因此,向下舍入..除非数字为负数,在这种情况下,向上舍入):

您甚至可以使用此选项并使用不同的舍入选项:向混合中添加0.5,现在将其舍入到最近值,并使用
x.5
舍入


其他的东西可以从中找到,例如
Math.round()

numMiles和milesPerGallon是双精度的,不。你把它们声明为字符串。Casting-为什么不使用它呢?例如
(int)((numMiles/milesPerGallon)*price)
totalCostPerMilis = (int) ((numMiles / milesPerGallon) * price);