簡體   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