2011-12-25 81 views
3

我正在做一項大學任務,我曾使用雙打錢。我知道使用雙打來支付貨幣價值是不可取的,所以我想知道如何取代現有的BigDecimal雙倍的代碼。如何使用BigDecimal替換java中的錢幣

由於這是一個大學任務,我不想直接幫助我的代碼,也不想在這裏發佈它,所以我創建了以下代碼,我將欣賞直接回復,即更改我正在提供的代碼,以便我能理解發生了什麼。

我想知道如何BigDecimal可以乘以/分/加/減一個int或一個double,或者如果這甚至不是一個可能性。

還有其他話題涉及BigDecimal的用法,但它們並不包括我的具體問題,但是,如果我忽略了已經被回答的帖子,我很抱歉。

下面的代碼:

import java.util.Scanner; 
import java.text.NumberFormat; 

class example { 
public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 

    NumberFormat fm = NumberFormat.getCurrencyInstance(); 

    System.out.println("Enter the first amount:"); 
    double money1 = in.nextDouble(); 
    System.out.println("Enter the second amount:"); 
    double money2 = in.nextDouble(); 
    System.out.println("Enter the third amount:"); 
    double money3 = in.nextDouble(); 

    double tax = 0.2; 
    double totalmoney = money1 + money2 + money3; 
    double moneytax = (totalmoney)*tax; 


    System.out.println("Your money added together is: " + fm.format(totalmoney)); 
    System.out.println("Tax on your money is: " + fm.format(moneytax)); 
    System.out.println("Your money after tax deduction is: " + fm.format((totalmoney-moneytax))); 
    } 
} 

回答

3

BigDecimal的替代方法可能是以美分進行所有計算,使用長整數,並在最後插入小數點。

+0

我試過用Integer.toString等,通過將它移回兩個地方添加小數,但我不知道如何通過乘以20%的稅率來計算它,如果你能幫助我,很棒。 – 2011-12-26 21:34:54

+0

20%是五分之一。稅是'金額/ 5'。帶回家是'(4 *金額)/ 5',檢查舍入錯誤。 – rossum 2011-12-26 22:14:25

+0

對不起我的noob問題,但不會計算稅,例如4049美分導致小數點,因此不準確的計算,因爲int將忽略小數點後面的任何內容?或者NumberFormat會解決這個問題? – 2011-12-28 19:28:36

1

BigDecimals的是不可改變的,但你可以使用特定的呼叫建立新的:

BigDecimal two = new BigDecimal("2.00"); 
BigDecimal four = new BigDecimal("4.00"); 

BigDecimal result = four.divide(two); 

你可能也想看看規模()方法。

3

如果你想避免使用double,你需要從一開始就不使用它。

BigDecimal money1 = new BigDecimal(in.nextLine()); 

您應該能夠看到四捨五入後的結果完全相同。