2014-12-24 7 views
3

Привет Я пытаюсь округлением число в 16 десятичных цифр но это только показать и не сгонять до 14 десятичных цифр.PHP: округление числа в 16 десятичных цифр

Вот моя попытка:

<?php 

$num= 0.16346153846153846; 

$round = number_format((float)$num, 17, '.', ''); 

echo $round * -1; 
?> 

ВЫВОД:

-0,16346153846154

ЗАПЛАНИРОВАННЫЕ:

0,1634615384615385

Я знаю, что float всего 14 десятичных знаков. Есть ли другой способ для 16 десятичных цифр?

+0

поплавков являются неточными. Как вы можете видеть, последние пять цифр уже округляют ошибки. Посмотрите на [произвольная точность математики] (http://php.net/manual/en/book.bc.php), если это является фактическим требованием. – mario

+0

http://php.net/manual/en/language.types.float.php – Rufinus

ответ

3

Вы можете установить этот параметр во время выполнения. 16 цифр, как правило, максимальное значение на большинстве платформ, большие значения, дающие только бессмысленные или «вымышленный» цифры:

ini_set("precision", "16"); 

См Changing precision level floating-point variables

+0

Я пробовал этот, прежде чем он всегда дает мне минимум десятизначное число, но если оно больше 16, оно также включает 17 десятичных чисел в моем списке , –

0

Можете ли вы попробовать это сделать, & посмотреть, что произойдет? (Может быть не самым лучшим способом борьбы с поплавками и цифрами, хотя)

$num = 0.16346153846153846; 
$new_num = $num * -1; 
echo number_format((float)$new_num, 17); 

Multiply, а затем попытаться округляя результат.