2012-05-17 30 views
27

Mã của tôi mẫu:Làm thế nào tôi có thể chia đúng cách sử dụng BigDecimal

import java.math.*; 

public class x 
{ 
    public static void main(String[] args) 
    { 
    BigDecimal a = new BigDecimal("1"); 
    BigDecimal b = new BigDecimal("3"); 
    BigDecimal c = a.divide(b, BigDecimal.ROUND_HALF_UP); 
    System.out.println(a+"/"+b+" = "+c); 
    } 
} 

Kết quả là: 1/3 = 0

Tôi đang làm gì sai?

+1

Xin lỗi về Lorem ipsum nhưng nó sẽ không cho phép tôi gửi mà không có nó là "câu hỏi là quá ngắn". –

+0

Kết quả của bạn là chính xác. Một phần ba, được làm tròn đến số nguyên gần nhất, phá vỡ quan hệ bằng cách làm tròn lên, thực sự là một bằng phẳng, tròn số không. –

+0

Vì vậy, nếu tôi cần 0.33333333? Làm thế nào để tôi phải chia 1 cho 3? –

Trả lời

51

Bạn đã chỉ định quy mô cho kết quả. Vui lòng thử điều này

import java.math.*; 

    public class x 
    { 
     public static void main(String[] args) 
     { 
     BigDecimal a = new BigDecimal("1"); 
     BigDecimal b = new BigDecimal("3"); 
     BigDecimal c = a.divide(b,2, BigDecimal.ROUND_HALF_UP); 
     System.out.println(a+"/"+b+" = "+c); 
     } 
    } 

điều này sẽ cho kết quả là 0,33. Xin vui lòng đọc API

Rohan

+0

Tôi đã xem xét 1.5 API thiếu 'divite (Sigdecimal, int, int)' ... –

+0

Jan liên kết trong bài viết của tôi là dành cho 1.5 API. phân chia (ước số BigDecimal, int scale, int roundingMode) đã được khoảng một thời gian, tôi tin. –

1

Tạo BigDecimal s sử dụng phao, như "1.0"; ít nhất tử số, nếu bạn muốn có kết quả thập phân.

+0

Là 'BigDecimal c = a.setScale (5) .divide (b, BigDecimal.ROUND_HALF_UP);' phương pháp tiếp cận đúng? Nó có thể được thực hiện tốt hơn? –

+0

@JanAjan Yep, đó có thể là một cách tiếp cận tốt hơn. –

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