2013-03-04 2 views
0

Я хочу усечь двойной.Как усечь двойное значение?

например.

double d=3.123456789087654; 

, если я хочу, чтобы обрезать его до 10-го знака после запятой результат должен быть

result: 3.1234567890 

мне не нужно округлить значение в результате

Я старался собственная функция как

 static double truncateDouble(double number, int numDigits) { 
    double result = number; 
    String arg = "" + number; 
    int idx = arg.indexOf('.'); 
    if (idx!=-1) { 
     if (arg.length() > idx+numDigits) { 
      arg = arg.substring(0,idx+numDigits+1); 
      result = Double.parseDouble(arg); 
     } 
    } 
    return result ; 
} 

но не получил соответствующий результат, как я хочу. Может кто-нибудь, пожалуйста, помогите мне очистить мою проблему.

Поддерживает ли java такую ​​функцию, которая поддерживает усечение, а не округление?

+0

Просто из любопытства, почему вы хотите потерять точность? – Supericy

+1

Я на стороне этого мало смысла. У вас есть прецедент для округления/усечения в точке, отличной от выведения числа? Кроме того, хотя у меня есть подозрительный NPE, правильно, что «подходящий» результат - это число, которое невозможно представить точно, можете ли вы сказать, какова фактическая проблема с вашим кодом? То есть какой неправильный результат для ввода и чего вы ожидали? – millimoose

+0

@millimoose: моя проблема проста..Я хочу, чтобы двойник после определенного нет после десятичной точки. – kTiwari

ответ

0

Вы можете использовать класс DecimalFormat.

double d = 3.123456789087654; 

DecimalFormat newFormat = new DecimalFormat("#.##########"); 
double tenDecimal = Double.valueOf(newFormat.format(d)); 

это будет округлять последнюю цифру.

Я согласен с NPE. никакое количество усечений не даст вам ровно 0,1.

только путь - преобразовать в строку и после подстроки преобразовать обратно в двойное.

+0

Это будет круглым. – Boann

+0

@Hemant: ур правильный, так как u жестко закодирован # знак в методе DEciamlFormat, во втором запуске, если я хотел бы изменить точку усечения после десятичной, тогда это не сработает, я буду hv изменять его явно – kTiwari

4

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

В качестве примера возьмите 0,1. Ближайший double составляет 0,1000000000000000055511151 ... и никакая сумма усечения не даст вам ровно 0,1.

+0

г. Точка верна, но по мере того, как у меня проблема, я хочу усечь ее до указанного значения. Можно ли это сделать .. – kTiwari

Смежные вопросы