Tôi cần truyền một nhân đôi thành một int trong Java, nhưng giá trị số phải luôn làm tròn xuống. tức là 99,99999999 -> 99
Tôi cần truyền một nhân đôi thành một int trong Java, nhưng giá trị số phải luôn làm tròn xuống. tức là 99,99999999 -> 99
Câu trả lời:
Truyền tới một int hoàn toàn giảm bất kỳ số thập phân nào. Không cần gọi Math.floor () (giả sử là số dương)
Đơn giản chỉ cần gõ với (int), ví dụ:
System.out.println((int)(99.9999)); // Prints 99
Điều này đang được nói, nó thực sự có một hành vi khác Math.floor
mà từ đó vòng về phía âm vô cực (@Chris Wong)
Math.floor
đó tạo ra một kết quả khác cho số âm so với một kiểu đánh máy đơn giản.
System.out.println((long)(9.9999e300));
BigDecimal
và RoundingMode
các lớp sử dụng ROUND_DOWN
cho làm tròn về 0 và ROUND_FLOOR
làm tròn về phía- âm-vô cùng.
Để ép kiểu nhân đôi thành số int và làm tròn thành số nguyên gần nhất (tức là không giống như số nguyên điển hình (int)(1.8)
và (int)(1.2)
, cả hai sẽ "làm tròn" về phía 0 và trả về 1
), chỉ cần thêm 0,5 vào giá trị double
mà bạn sẽ nhập thành anint
.
Ví dụ, nếu chúng ta có
double a = 1.2;
double b = 1.8;
Sau đó, các biểu thức đánh máy sau cho x và y và sẽ trả về các giá trị làm tròn xuống ( x = 1
và y = 1
):
int x = (int)(a); // This equals (int)(1.2) --> 1
int y = (int)(b); // This equals (int)(1.8) --> 1
Nhưng bằng cách thêm 0,5 vào mỗi số, chúng ta sẽ nhận được kết quả làm tròn đến số nguyên gần nhất mà chúng ta có thể mong muốn trong một số trường hợp ( x = 1
và y = 2
):
int x = (int)(a + 0.5); // This equals (int)(1.8) --> 1
int y = (int)(b + 0.5); // This equals (int)(2.3) --> 2
Là một lưu ý nhỏ , phương pháp này cũng cho phép bạn kiểm soát ngưỡng mà tại đó double
được làm tròn lên hoặc xuống khi (int)
typecasting.
(int)(a + 0.8);
để đánh máy. Điều này sẽ chỉ làm tròn lên (int)a + 1
bất cứ khi nào giá trị thập phân lớn hơn hoặc bằng 0,2. Tức là, bằng cách thêm 0,8 vào double
ngay trước khi đánh máy, 10,15 và 10,03 sẽ được làm tròn thành 10 sau khi (int)
đánh máy, nhưng 10,23 và 10,7 sẽ được làm tròn thành 11.
System.out.println(""+ (int)(-0.8d + 0.5))
in 0, thay vì -1 như mong đợi
Cái này hoạt động tốt int i = (int) dbl;
thử với cái này, cái này đơn giản
double x= 20.22889909008;
int a = (int) x;
this will return a=20
hoặc thử với cái này: -
Double x = 20.22889909008;
Integer a = x.intValue();
this will return a=20
hoặc thử với cái này: -
double x= 20.22889909008;
System.out.println("===="+(int)x);
this will return ===20
có thể những mã này sẽ giúp bạn.
Trong câu hỏi này:
1.Đóng đôi thành số nguyên là một nhiệm vụ rất dễ dàng.
2.Nhưng nó không làm tròn giá trị nhân đôi đến số thập phân gần nhất. Do đó, quá trình đúc có thể được thực hiện như sau:
double d=99.99999999;
int i=(int)d;
System.out.println(i);
và nó sẽ in 99
, nhưng việc làm tròn vẫn chưa được thực hiện.
Do đó, để làm tròn số, chúng ta có thể sử dụng,
double d=99.99999999;
System.out.println( Math.round(d));
Điều này sẽ in đầu ra của 100
.