2012-01-11 42 views
5

thể trùng lặp:
Round a double to 2 significant figures after decimal pointlàm tròn điểm thập phân

tôi đang cố gắng để làm việc với chuyển đổi một mức độ thập phân (23,1248) vào một mức độ phút phong cách (23 7'29.3"). đây là những gì tôi có cho đến thời điểm này:

double a=23.1248; 
    int deg=(int)a;//gives me the degree 
    float b=(float) (a-deg); 
    int min=(int) (b*60);//gives me the minutes 
    double sec= (double) ((c*60)-min);//gives me my seconds 

mọi thứ hoạt động tốt, nhưng tôi muốn để làm tròn số giây lên đến mười hoặc mười lăm gần nhất. Tôi đã xem định dạng thập phân, nhưng không muốn bỏ nó vào một chuỗi. Tôi cũng đã xem xét tỷ lệ lớn nhưng không nghĩ điều đó sẽ hữu ích,

+0

Có một phương pháp vòng trong js –

+0

Tôi nghĩ điểm thập phân đã có hình tròn. Và dấu trừ, dấu cộng và phân chia đều bằng phẳng :) Để "làm tròn tới 100", chỉ cần sử dụng "Math.round()": http://docs.oracle.com/javase/1.4.2/docs/api /java/lang/Math.html double x = round (y/100.0) * 100.0; – paulsm4

+0

BigDecimal hoạt động tốt, bạn có thể tạo một vòng (số, số thập phân) chức năng giống như một trong câu trả lời này. Hãy thử nó, tôi không thấy lý do tại sao nó sẽ không hoạt động. http://stackoverflow.com/a/8911683/744859 –

Trả lời

11

Hãy thử sử dụng Math.round(double) trên số sau khi mở rộng quy mô, sau đó thu nhỏ lại.

double x = 1.234; 
double y = Math.round(x * 100.0)/100.0; // => 1.23 

Bạn cũng có thể sử dụng BigDecimal nếu bạn muốn nhận được thực sự nặng:

BigDecimal a = new BigDecimal("1.234"); 
BigDecimal b = a.setScale(2, RoundingMode.DOWN); // => BigDecimal("1.23") 
0

Trước hết, có chức năng thư viện để thực hiện việc này, vậy tại sao không chỉ sử dụng chúng? Xem Math.round(). Không cần phải phát minh lại bánh xe. Nếu bạn muốn, mặc dù, bạn có thể thử những gì sau. Để làm tròn một đôi vị trí của phần trăm:

x = 0.01 * floor(x * 100.0) 

để làm tròn một đôi vị trí của thứ mười:

x = 0.1 * floor(x * 10.0) 

để làm tròn một đôi đến nơi 10^k:

x = 10^k * floor(x/10^k) 

Việc thực hiện bằng bất kỳ ngôn ngữ nào - kể cả Java - phải đơn giản. Một vấn đề với điều này là nó không thực sự tròn, nhưng truncates, đến vị trí của bạn. Để khắc phục điều này, bạn có thể chỉ cần thêm 0,5 * 10^k vào số trước khi làm tròn. Nếu bạn chỉ muốn làm tròn lên, hãy sử dụng các phiên bản ở trên và thêm 10^k trước hoặc sau khi tính toán.

+0

Bạn sẽ không muốn sử dụng round() thay vì floor()? Tôi hy vọng 0.193 sẽ được làm tròn thành 0.2 nếu đến 1dp. –

+0

@brainzzy Tôi thảo luận làm thế nào để đạt được điều tương tự như vòng() và trần() bằng cách sử dụng sàn() nguyên thủy cho số cơ sở-10. Nhưng về cơ bản, có, nếu anh ta muốn làm tròn đến gần nhất (thay vì luôn luôn lên hoặc luôn luôn xuống), vòng() nên làm việc. – Patrick87

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