[英]How to convert Double to Int when dividing two Doubles and multiplying the Double quotient by Int?
我正在研究下面的程序。 你如何计算totalCostPerMiles = (numMiles / milesPerGallon) * price;
当totalCostPerMiles
是int
, numMiles
和milesPerGallon
是doubles
,而price
是int
以获得计算值时?
假设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
数学运算始终是二元运算(因此,2 个参数。'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
舍入。
其他东西可以通过例如Math.round()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.