Java округление по определенному шагу - PullRequest
0 голосов
/ 07 июля 2011

Часто нам нужно округлить число, например сумму, для минимальной детализации валюты, например 0,05.

Я столкнулся с проблемой переполнения в Java и, казалось бы, решил ее ... хотел бы, чтобы вы рассмотрели, если это правильное решение ... на этом форуме также есть другие решения ...

public static float round(float input, float step) {

float a = Math.round(input / step) * step;

//Can't return "a" directly because of overflow problem in some cases
int b = Math.round(a * 100);

return (float) (float)b / 100f; }

Но это будет работать только для шага с двумя десятичными разрядами (например, 0,05), поскольку я жестко кодирую 100 здесь ...

Ответы [ 2 ]

9 голосов
/ 07 июля 2011

Это будет работать для любого размера шага:

public static float round(float input, float step) 
{
  return ((Math.round(input / step)) * step);
}
5 голосов
/ 07 июля 2011

Если вы работаете с сотнями десятичных знаков, float не тот тип, который вам нужен.Могу ли я перенаправить вас на BigDecimal?

...