Можете ли вы воспроизвести функцию Floor, найденную в Excel на Java?

Я искал интернет, но не нашел решения для моего вопроса.

Я хотел бы иметь возможность использовать тот же / реплицировать тип функции FLOOR, найденной в Excel на Java. В частности, я хотел бы иметь возможность предоставить значение (двойное или предпочтительно BigDecimal) и округлить до ближайшего кратного значения, которое я предоставляю.

Examples 1: Value = 24,519.30235 Significance = 0.01 Returned Value = 24,519.30 Example 2: Value = 76.81485697 Significance = 1 Returned Value = 76 Example 3: Value = 12,457,854 Significance = 100 Returned Value = 12,457,800 

Я довольно новичок в java, и мне было интересно узнать, знает ли кто-нибудь, что API уже включает эту функцию, или если они будут достаточно любезными, чтобы дать мне решение вышеизложенного. Я знаю BigDecimal, но, возможно, я пропустил правильную функцию.

Большое спасибо

Да, ты можешь.

Допустим, что указанные числа

76.21445 и

0,01

что вы можете сделать, умножьте 76.21445 на 100 (или разделите на 0,01) вокруг результата на ближайшее или меньшее целое (в зависимости от того, что вы хотите)

и умножьте его на число снова.

Обратите внимание, что он не может точно напечатать то, что вам нужно, если вы не будете использовать цифры с десятичной точностью. (Проблема чисел, которые в двоичном формате не являются конечными в расширении). Также в Math у вас есть круглые функции, которые делают довольно много, чего вы хотите.

http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html вы используете его так

 round(200.3456, 2); 

Чтобы setScale() BigDecimal , вы можете использовать setScale() . В вашем случае вы хотите RoundingMode.FLOOR .

Теперь вам нужно определить количество цифр из «значения». Для этого используйте Math.log10(significance) . Вероятно, вам придется округлить результат.

Если результат отрицательный, то у вас есть значение <1. В этом случае используйте setScale(-result, RoundingMode.FLOOR) , setScale(-result, RoundingMode.FLOOR) для округления до N цифр.

Если это> 1, используйте этот код:

  value .divide(significance) .setScale(0, RoundingMode.FLOOR) .multiply(significance); 

т.е. 1024 и 100 дает 10.24 -> 10 -> 1000 .

  • Округление варианта
  • Округление десятичных дробей до дробного числа
  • Округление в Excel
  • Ошибка округления VBA - <Тип Несоответствие>
  • Как добавить ROUND () в каждую ячейку выбора, но
  • Округление двойных значений в C ++, например, в MS Excel
  • Получайте количество счетов из диапазона сумм в долларах - каскадируйте больше на меньшие счета
  • Вычислить разницу и сумму два раза и округлить до ближайшего 1/4 часа в десятичном формате
  • Функция VBA Round
  • Попытка имитировать округление Excel вызывает у меня горе
  • Сколько X-клеток для добавления Y%
  • Давайте будем гением компьютера.