Java làm tròn lên một int bằng Math.ceil?

Rate this post

Bạn đang thao tác 157 / 32 chia hai số nguyên với nhau, điều này luôn dẫn đến một số ít nguyên được làm tròn xuống. Vì vậy, ( int ) Math. ceil (… ) không làm gì cả. Có ba giải pháp khả thi để đạt được những gì bạn muốn. Tôi khuyên bạn nên sử dụng tùy chọn 1 hoặc tùy chọn 2. Vui lòng KHÔNG sử dụng tùy chọn 0.

Tùy chọn 0

Chuyển đổi a và nhân b đôi, và bạn hoàn toàn có thể sử dụng phép chia và Math. ceil như bạn muốn nó hoạt động giải trí. Tuy nhiên tôi rất không khuyến khích việc sử dụng chiêu thức này, do tại sự phân loại kép hoàn toàn có thể không đúng chuẩn. Để đọc thêm về sự thiếu đúng chuẩn của đôi, xem thắc mắc này.

int

n

=

(

int

)

Math

.

ceil

( (

double

)

a

/

b

) ) ;

lựa chọn 1

int

n

=

a

/

b

+

( (

a

%

b

= =

0

)

?

0

:

1

) ;

Bạn làm a / b với luôn sàn nếu a và b đều là số nguyên. Sau đó, bạn có một phù thủy if-statement nội tuyến kiểm tra xem bạn có nên trần thay vì sàn hay không. Vì vậy, + 1 hoặc + 0, nếu có phần còn lại với phép chia bạn cần + 1. a % b = = 0 kiểm tra phần còn lại.

Lựa chọn 2

Tùy chọn này rất ngắn, nhưng hoàn toàn có thể so với 1 số ít ít trực quan hơn. Tôi nghĩ cách tiếp cận ít trực quan này sẽ nhanh hơn chiêu thức so sánh và chia đôi :

int

n

=

(

a

+

b

1

)

/

b

;

Để giảm năng lực tràn, bạn hoàn toàn có thể sử dụng như sau. Tuy nhiên xin chú ý quan tâm rằng nó không hoạt động giải trí cho a = 0 và b < 1.

int

n

=

(

a

1

)

/

b

+

1

;

Giải thích đằng sau ” cách tiếp cận ít trực quan hơn “

Vì việc chia hai số nguyên trong Java ( và hầu hết các ngôn từ lập trình khác ) sẽ luôn tạo ra hiệu quả. Vì thế :

int

a

,

b

;

int

result

=

a

/

b

(

is the same as floor

(

a

/

b

)

)

Nhưng chúng tôi không muốn floor(a/b), nhưng ceil(a/b), và sử dụng các định nghĩa và cốt truyện từ Wikipedia :Java làm tròn lên một int bằng Math.ceil?

Với các lô của công dụng sàn và trần bạn hoàn toàn có thể thấy mối quan hệ.

Java làm tròn lên một int bằng Math.ceil? Java làm tròn lên một int bằng Math.ceil?

Bạn hoàn toàn có thể thấy điều đó floor ( x ) < = ceil ( x ). Chúng tôi cần floor ( x + s ) = ceil ( x ). Vì vậy, tất cả chúng ta cần phải tìm s. Nếu chúng tôi thực thi 1/2 < = s < 1 nó sẽ vừa phải ( thử một vài số lượng và bạn sẽ thấy nó, tôi thấy thật khó để chứng minh điều này ). Và 1/2 < = ( b-1 ) / b < 1, thế cho nên

ceil

(

a

/

b

)

=

floor

(

a

/

b

+

s

)

=

floor

(

a

/

b

+

(

b

1

) /

b

)

=

floor

(

(

a

+

b

1

) /

b

)

)

Đây không phải là một bằng chứng thực sự, nhưng tôi kỳ vọng bạn hài lòng với nó. Nếu ai đó hoàn toàn có thể lý giải nó tốt hơn tôi cũng sẽ nhìn nhận cao nó. Có thể hỏi nó trên MathOverflow.

Source: http://amthuc247.net
Category: Cách làm