2012-01-17 54 views
20

這個程序的工作原理,除非nJars的數量是7的倍數,我會得到一個答案,如$ 14.999999999999998。對於6,輸出是14.08。如何修復7的倍數的例外,所以它會顯示類似14.99美元的東西?如何限制雙倍打印的小數位數?

import java.util.Scanner; 
public class Homework_17 
{ 
private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs; 

public static void main(String[] args) 
    { 
    computeShippingCost(); 
    } 

    public static void computeShippingCost() 
    { 
    System.out.print("Enter a number of jars: "); 
    Scanner kboard = new Scanner (System.in); 
    nJars = kboard.nextInt(); 
    int nCartons = (nJars + 11)/12; 
    int totalOunces = (nJars * 21) + (nCartons * 25); 
    int lbs = totalOunces/16; 
    double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0; 

    System.out.print("$" + shippingCost); 
    } 
} 
+7

因爲它看起來像是作業,所以我只給出一個提示:*使用DecimalFormat類。* – 2012-01-17 13:24:11

+0

使用Java提供的類有什麼問題?這不是任何第三方課程。 – 2012-01-17 13:28:04

+1

重複的http://stackoverflow.com/questions/8819842/best-way-to-format-a-double-value-to-2-decimal-places – 2012-01-17 13:29:39

回答

37

使用DecimalFormatter

double number = 0.9999999999999; 
DecimalFormat numberFormat = new DecimalFormat("#.00"); 
System.out.println(numberFormat.format(number)); 

會給你 「0.99」。您可以在右側添加或減去0以獲得更多或更少的小數。

或者在右側使用'#'使附加數字可選,如#中所示。##(0.30)將使尾部0變爲(0.3)。

+3

恕我直言,當您的意思是使用'double'時不要使用'Double' 。 – 2012-01-17 13:32:01

0

使用的DecimalFormat類格式化雙

9

如果要在控制檯打印/寫入雙值,請使用System.out.printf()System.out.format()方法。

System.out.printf("\n$%10.2f",shippingCost); 
System.out.printf("%n$%.2f",shippingCost); 
+1

''$%。2f「'將會正常,因爲它不會在'」$%10.2f「'中打印任何前面的空格。反正+1。 – 2012-01-17 13:32:16

+1

+1:'%n'可能是比\ \更好的選擇 – 2012-01-17 13:32:33

0

格式化類也是一個不錯的選擇。 fmt.format(「%。2f」,變量); 2這裏顯示你想要多少小數。例如,您可以將其更改爲4。不要忘記關閉格式化程序。

private static int nJars, nCartons, totalOunces, OuncesTolbs, lbs; 

public static void main(String[] args) 
    { 
    computeShippingCost(); 
    } 

    public static void computeShippingCost() 
    { 
    System.out.print("Enter a number of jars: "); 
    Scanner kboard = new Scanner (System.in); 
    nJars = kboard.nextInt(); 
    int nCartons = (nJars + 11)/12; 
    int totalOunces = (nJars * 21) + (nCartons * 25); 
    int lbs = totalOunces/16; 


    double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0; 

    Formatter fmt = new Formatter(); 
    fmt.format("%.2f", shippingCost); 

    System.out.print("$" + fmt); 

    fmt.close(); 

} 
0

,我想的只是它的樂趣是把你的十進制數轉換成字符串,然後把繩剪斷分爲兩個字符串,一個包含點和小數和其他含還好一個其他的解決辦法點的左邊的Int。之後,您將點和小數的字符串限制爲3個字符,一個用於小數點,另一個用於小數點。然後重新組合。

double shippingCost = ((nCartons * 1.44) + (lbs + 1) * 0.96) + 3.0; 
String ShippingCost = (String) shippingCost; 
String decimalCost = ShippingCost.subString(indexOf('.'),ShippingCost.Length()); 
ShippingCost = ShippingCost.subString(0,indexOf('.')); 
ShippingCost = ShippingCost + decimalCost; 

那裏!很簡單,對吧?

0

不要忘記:

import java.text.DecimalFormat; 

否則您將無法訪問的NumberFormat!