2015-10-05 24 views
-1

我是Java語言的初學者,我遇到了具有'不兼容類型:可能有損地從double轉換爲int'的代碼的問題。我能做些什麼來解決這個問題?我完全失去了它。不兼容的類型:使用開關case可能有損地從double轉換爲int

import javax.swing.*; 
import java.text.*; 

public class CalculateIncome{ 

    public static void main(String[]args){ 

     String s1, outMessage; 
     double monthlySales, income; 

     DecimalFormat num = new DecimalFormat(",###.00"); 

     s1 = JOptionPane.showInputDialog("Enter the value of monthly sales:"); 
     monthlySales = Double.parseDouble(s1); 

     switch(monthlySales) { 
     case 1: 
      income = 200.00+0.03*monthlySales; 
      break; 
     case 2: 
      income = 250.00+0.05*monthlySales; 
      break; 
     case 3: 
      income = 300.00+0.09*monthlySales; 
      break; 
     case 4: 
      income = 325.00+0.12*monthlySales; 
      break; 
     case 5: 
      income = 350.00+0.14*monthlySales; 
      break; 
     case 6: 
      income = 375.00+0.15*monthlySales; 
     default: 
      outMessage = ("For the monthly sales of $" +num.format(monthlySales)+ "\nThe income is"+num.format(income)); 
     } 
      JOptionPane.showMessageDialog(null,outMessage,"QuickTest Program 5.5b", JOptionPane.INFORMATION_MESSAGE); 

      System.exit(0); 
    } 

     } 
+4

一個double不是一個int,不應該被視爲這樣。 1.01不是1,也不是0.001 – Stultuske

+0

如果我爲月銷售額輸入「1.5」,該怎麼辦?那麼你期望它做什麼? –

+0

我想你的問題在'switch(monthlySales)'行中。開關接受int而不是Double。你可以使用'Integer.parseInt()'而不是'Double.parseDouble' –

回答

1

基本上這個switch語句引起該問題:

switch(monthlySales){ 
    case 1: 
     ... 

它轉換monthlySalesdoubleint。由於double是64位浮點數,而int是32位整數,因此從doubleint的轉換很有可能不是無損的。

要麼使用intmonthlySales,這是我建議的解決方案,因爲你可以簡單地將設備從美元改爲美分,或任何貨幣你在計算
另一種選擇是增加一個演員:switch((int) monthlySales){(不建議這樣做,因爲錯誤會警告您相同的信息丟失 - 小數部分將簡單地從該值中刪除,double可以保持比int更大和更小的值)。
最後但並非最不重要的一點是:用if-else代替switch陳述,並與雙倍數:if(monthlySales == 1.0)...進行比較。

+0

哦,我明白了..非常感謝你爲我清理東西:) – Miru

+0

我建議不要使用double轉換爲int,它可能在這個簡單的代碼中工作,但在更大的規模上可能會引入錯誤,因爲將double轉換爲int總是會將小數點和零點向下舍入。因此¨1.4和1.5在投射時都是1。快進幾年了,OP正在撓頭,爲什麼他的代碼在沒有任何理由的情況下行事不端。 其他建議都可以。 –

1

在Java語言中,switch表達式允許使用int數據類型。 提供其他數據類型後,將嘗試自動將值提升爲int。由於您提供的是double類型的值,因此它將被轉換爲int並因此發出警告。

double monthlySales, income; 

    switch(monthlySales) { 

每月的銷售參數將是一個整數,除非,金額或類似的東西被捕獲。我建議

int monthlySalesInt = 0; 
    try { 
     int monthlySalesInt = Integer.parseInt(monthlySales); 
    }catch(NumberFormatException e) { 
     //exception handling - either wrap and rethrow, or warn using JDialog. 
    } 
    switch(monthlySalesInt) { 
    ... 
相關問題