繁体   English   中英

将两个 Double 相除并将 Double 商乘以 Int 时如何将 Double 转换为 Int?

[英]How to convert Double to Int when dividing two Doubles and multiplying the Double quotient by Int?

我正在研究下面的程序。 你如何计算totalCostPerMiles = (numMiles / milesPerGallon) * price; totalCostPerMilesintnumMilesmilesPerGallondoubles ,而priceint以获得计算值时?

假设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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM