У меня есть следующие коды, округленные по прямой скорости до 15 знаков после запятой. Когда _ForwardRate составляет 13 555,0, результат возвращается неправильно.Java Округление до 15 знаков после запятой
public double round(double Number, int Decimal_Place) {
if (Number==0) return 0;
double _plug = 0.000001;
if (Number < 0) {
_plug = -0.000001;
}
//Sometime a number is rounded down to 2.22499999999 by java.
//Actual precision is 2.245. Without this plug, a 2 dp rounding result
//in 2.22 when it should be 2.23
double _newNumber = Number;
if (Decimal_Place==2) {
_newNumber = _newNumber+_plug;
}
double _number_abs = Math.abs(_newNumber);
double _factor = Math.pow(10, Decimal_Place);
double _rd = Math.round(_number_abs * _factor);
double _r = _rd/_factor;
if (Number <= 0)
_r = _r * -1;
return _r;
}
Double _ForwardRate = getForward_rate();
BigDecimal _fwdrate_bd = BigDecimal.valueOf(_ForwardRate.doubleValue());
_ForwardRate = round(new Double(_fwdrate_bd.doubleValue()), 15);
Текущий результат
9,223.372036854777
Ожидаемый результат
13,555.000000000000000
Что такое функция 'round'? – Li357
@AndrewL. Я редактировал свой пост. – bittersour
Нечто, за исключением округления, неверно, если вы ожидаете '13 555' по сравнению с' 9,223' –