2013-11-27 3 views
0

Мне жаль, что я не мог понять, как это возможно, что не округлено десятичное число, полученное из следующего кода.Круглый номер с Math round: не работает

File path2 = Environment.getDataDirectory(); 
StatFs stat2 = new StatFs(path.getPath()); 
long blockSize2 = stat.getBlockSize(); 
long availableBlocks = stat.getAvailableBlocks(); 
double result = availableBlocks * blockSize; 

free = (Preference)this.findPreference("free_mem"); 
free.setSummary(Double.toString(result)+" GB"); 

В коде аналогично этому использованию этой инструкции и работает

result = Math.round(result * 10)/10d; 

Почему бы не работать здесь, и я до сих пор вижу ряд с большим количеством знаков после запятой?

+1

Возможно, потому что вы '/ 10' ... Пример:' Math.round (1)/10' = 0,1 – Vallentin

+0

Итак, вы пытаетесь удалить десятичные знаки? Вы ищете поведение, подобное 'Math.Floor()'? – Grambot

+0

Deja vu. Сегодня я видел такой вопрос, и у него была такая же ошибка. –

ответ

1

Если я понял ваш вопрос прямо вам нужно NumberFormat здесь:

NumberFormat nf = NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(1); 
nf.format(result); 

Это дает ряд с 1 знака после запятой.

Так что, если result - 6.6789, он произведет 6.7.

Похожие: Round number to only first decimal place

Только примечание:

Если вы сделаете это:

Math.round(result * 10)/10d; 

вы в основном говорят:

  1. Multiply result с 10
  2. Завершить результат
  3. Затем разделите его на десять.

Когда вы избавились от десятичных знаков на шаге 2, после деления вы получили еще одну кучу десятичных знаков.

+0

Я думаю, что его проблема в том, что он действительно видит десятичные знаки после использования 'Math.round()' ... Как и мои комментарии, это говорит о том, что он '/ 10' после' Math.round() ' – Vallentin

+0

Не работает ! Я получаю 5.654.695.936 –

+0

Вы должны применить 'NumberFormat.format()' ** после ** последнего расчета !! –

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