2016-08-18 2 views
0

Итак, у меня есть это число с плавающей запятой: -Float в BigInt

$floatval = '1.05143617E+18'; 

Это эквивалентно целое: -

1051436170000000000 

Использование PHP, я пытаюсь преобразовать этот поплавок номер в требуемое целочисленное значение.

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

$floatval = '1.05143617E+18'; 
var_dump(convert($floatval)); 

function convert($floatval) 
{ 
    $divided = explode('+', $floatval); 
    $first = floatval($divided[0]); 
    $second = intval($divided[1]); 
    $final = intval($first * pow(10, $second)); 
    return $final; 
} 

Выход: -

953738112 

Все, что я стараюсь, вывод не приходит по мере необходимости. Где я ошибаюсь?

+0

Какова ваша версия ОС и PHP? –

ответ

-1
$floatval = (float) '1.05143617E+18'; 
$intval = (int) $floatval; 
var_dump($intval); 

Выход: int(1051436170000000000)

+0

Что делает '- 0' выполнить, из интереса? – jedifans

+0

@jedifans на самом деле вы правы.Кастинг как INT не нужен 0. 0 будет для того, чтобы заставить переменную в состояние INT. Ты прав. –

-2

(int)(float)$floatval; делает трюк.

+0

Это не делает трюк. – RobertPuerco

+0

Непонятно, почему меня нивелируют. Если вы хотите, чтобы ваше конкретное решение работало, взорвите E, а не +. В любом случае ни одно решение не будет работать с INT_MAX! – jedifans

+0

Вы используете 32-битную систему? – jedifans

0

Вероятно, вы имеете дело с целочисленным переполнением, вероятно, потому, что вы работаете в PHP на Windows, и ваша система не поддерживает 64-битные целые числа. Вы можете избежать этой проблемы, выполнив вычисления с помощью функций из расширения bcmath. Если вы работаете в Windows, PHP будет иметь встроенную поддержку для bcmath, как указано в документации here. Использование BCMath, Ваша convert функция может быть реализована следующим образом:

function convert($floatval) 
{ 
    $divided = explode('E+', $floatval); 
    $base = $divided[0]; 
    $exp = $divided[1]; 
    $final = bcmul($base, bcpow('10', $exp)); 
    return $final; 
} 

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

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