Я решал проблему, которая требует усечения вывода, и, к моему удивлению, я не смог найти способ урезать числа в java.
Вывод должен быть числом, за которым следует 6 знаков после запятой.
Я хочу, чтобы double truncate(double number,int places)
и вывод был truncate(14/3.0) = 4.666666
.
но то, что я получаю
public static double round(double value, int places) {
if (places < 0) throw new IllegalArgumentException();
long factor = (long) Math.pow(10, places);
value = value * factor;
long tmp = Math.round(value);
return (double) tmp / factor;
}
// rounds( 14/3.0 , 6 ) = 4.666667
С String.format
я получаю
String.format("%.6f", 14/3.0) = 4.666667
Я также попробовал решение, которое я нашел в stackoverflow, в котором предлагалось использовать BigDecimal, и оно дало мне тот же ответ.
NumberFormat
тоже похоже работает таким же образом
java.text.NumberFormat f = java.text.NumberFormat.getNumberInstance();
f.setMinimumFractionDigits(6);
System.out.println(f.format(14/3.0)); // 4.666667
Есть ли встроенный метод, который делает это, или мне нужно написать свой собственный, используя что-то вроде BigInteger? Я что-то делаю не так?