tôi có một loạt các Java thập phân như:Làm thế nào để cắt bỏ thập phân trong Java KHÔNG làm tròn?
0.43678436287643872
0.4323424556455654
0.6575643254344554
tôi muốn cắt đứt tất cả mọi thứ sau 5 chữ số thập phân. Sao có thể như thế được?
tôi có một loạt các Java thập phân như:Làm thế nào để cắt bỏ thập phân trong Java KHÔNG làm tròn?
0.43678436287643872
0.4323424556455654
0.6575643254344554
tôi muốn cắt đứt tất cả mọi thứ sau 5 chữ số thập phân. Sao có thể như thế được?
Nếu bạn muốn giữ mọi thứ nhanh chóng và đơn giản. ;)
public static void main(String... args) {
double[] values = {0.43678436287643872, 0.4323424556455654, 0.6575643254344554,
-0.43678436287643872, -0.4323424556455654, -0.6575643254344554,
-0.6575699999999999 };
for (double v : values)
System.out.println(v + " => "+roundDown5(v));
}
public static double roundDown5(double d) {
return (long) (d * 1e5)/1e5;
}
// Or this. Slightly slower, but faster than creating objects. ;)
public static double roundDown5(double d) {
return Math.floor(d * 1e5)/1e5;
}
in
0.43678436287643874 => 0.43678
0.4323424556455654 => 0.43234
0.6575643254344554 => 0.65756
-0.43678436287643874 => -0.43678
-0.4323424556455654 => -0.43234
-0.6575643254344554 => -0.65756
-0.6575699999999999 => -0.65756
float f = 0.43678436287643872;
BigDecimal fd = new BigDecimal(f);
BigDecimal cutted = fd.setScale(5, RoundingMode.DOWN);
f = cutted.floatValue();
Sẽ không làm tròn số thập phân cuối cùng này? OP muốn tránh điều đó. – tobiasbayer
HALF_UP không chính xác. có thể là "XUỐNG"? – Kent
Có, DOWN, tất nhiên. – Artem
Double.parseDouble(String.valueOf(x).substring(0,7));
HOẶC
Double.valueOf(String.valueOf(x).substring(0,7));
nơi x
chứa giá trị bạn muốn cắt như 0.43678436287643872
tôi tin rằng các lớp java.text.DecimalFormat
là những gì bạn cần.
Các DecimalFormat cũng có thể hỗ trợ ở đây:
double d = 0.436789436287643872;
DecimalFormat df = new DecimalFormat("0.#####");
df.setRoundingMode(RoundingMode.DOWN);
double outputNum = Double.valueOf(df.format(d));
String outpoutString = df.format(d);
tôi sẽ làm điều đó với biểu thức thông thường như thế này:
double[] values = {
0.43678436287643872,
0.4323424556455654,
0.6575643254344554,
-0.43678436287643872,
-0.4323424556455654,
-0.6575643254344554
};
Pattern p = Pattern.compile("^(-?[0-9]+[\\.\\,][0-9]{1,5})?[0-9]*$");
for(double number : values) {
Matcher m = p.matcher(String.valueOf(number));
boolean matchFound = m.find();
if (matchFound) {
System.out.println(Double.valueOf(m.group(1)));
}
}
Các mô hình có thể dễ dàng sửa đổi nếu bạn cần hỗ trợ nhiều hơn/ít chữ số thập phân hơn.
Để khái quát Peter trả lời bạn có thể làm:
public static double round(double n, int decimals) {
return Math.floor(n * Math.pow(10, decimals))/Math.pow(10, decimals);
}
Về mặt kỹ thuật, không có: hành vi cắt đứt các chữ số thập phân hơn nữa * là * tròn, chỉ bạn luôn làm tròn xuống 5 chữ số thập phân. Xem câu trả lời bên dưới để biết các tùy chọn của bạn. – Piskvor
bạn có muốn kết quả là một Chuỗi hoặc một số không? –
Tôi muốn kết quả là một số – Zubair