2012-01-17 45 views
20

Chương trình này hoạt động, trừ khi số lượng nJars là bội số của 7, tôi sẽ nhận được câu trả lời như $ 14.999999999999998. Đối với 6, đầu ra là 14,08. Làm thế nào để sửa lỗi ngoại lệ cho bội số của 7 vì vậy nó sẽ hiển thị một cái gì đó như $ 14,99?Làm cách nào để hạn chế số lượng số thập phân được in cho gấp đôi?

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

Vì có vẻ như đó là bài tập về nhà, tôi sẽ chỉ gợi ý: * Sử dụng lớp DecimalFormat. * –

+0

Sự cố khi sử dụng lớp do Java cung cấp là gì? Nó không phải là bất kỳ lớp bên thứ ba. –

+1

trùng lặp của http://stackoverflow.com/questions/8819842/best-way-to-format-a-double-value-to-2-decimal-places –

Trả lời

37

Sử dụng một DecimalFormatter:

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

sẽ cung cấp cho bạn "0.99". Bạn có thể cộng hoặc trừ 0 ở bên phải để nhận được nhiều hơn hoặc ít hơn số thập phân.

Hoặc sử dụng '#' ở bên phải để tạo các chữ số bổ sung tùy chọn, như với #. ## (0.30) sẽ thả dấu 0 để trở thành (0.3).

+3

IMHO, Không sử dụng 'Double' khi bạn muốn sử dụng' double' . –

0

Sử dụng các lớp DecimalFormat để định dạng đôi

9

Nếu bạn muốn in/ghi giá trị kép ở bảng điều khiển, sau đó sử dụng phương thức System.out.printf() hoặc System.out.format().

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

'" $%. 2f "' sẽ là ok vì nó không in bất kỳ khoảng trống trước nào như trong '" $% 10.2f "'.Anyways +1. –

+1

+1: '% n' có thể là lựa chọn tốt hơn' \ n' –

0

Lớp định dạng cũng là một lựa chọn tốt. fmt.format ("%. 2f", biến); 2 ở đây hiển thị số lượng số thập phân bạn muốn. Bạn có thể thay đổi nó thành 4 ví dụ. Đừng quên đóng trình định dạng.

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

sao một giải pháp khác mà tôi nghĩ chỉ dành riêng cho những niềm vui của nó sẽ được chuyển số thập phân của bạn thành một chuỗi và sau đó cắt chuỗi thành 2 dây, một chứa điểm và số thập phân và các thuốc khác có chứa Int ở bên trái của điểm. sau đó bạn giới hạn chuỗi của điểm và số thập phân thành 3 ký tự, một cho dấu thập phân và số khác cho số thập phân. sau đó chỉ tái kết hợp.

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; 

Có! Đơn giản, phải không?

0

Đừng quên:

import java.text.DecimalFormat; 

Nếu không, bạn sẽ không thể truy cập vào NumberFormat !!

Các vấn đề liên quan