PHP: почему умножение на «1E3» возвращает double, а не int? - PullRequest
0 голосов
/ 20 апреля 2019

У меня есть следующий код:

$waitTimeInMs = random_int(500, 1000);
// 1E3 = 10 to the power of 3 = 1000
echo gettype($waitTimeInMs) .'|'.gettype($waitTimeInMs * 1E3) . '|' . gettype($waitTimeInMs * 1000) .'|' . $waitTimeInMs * 1E3;

Это возвращает integer|double|integer|759000.

Итак, практически:

  • random_int() возвращает int;
  • Умножение на 1E3 возвращает double;
  • Умножение на 1000 возвращает int;

Итак,почему умножение на 1E3 возвращает удвоение, а не int, если 1000 = 1E3?

Ответы [ 2 ]

1 голос
/ 20 апреля 2019

Ваше предположение неверно:

// 1E3 = 10 to the power of 3 = 1000

1E3 является краткой формой +1.000E3.Это по определению число с плавающей запятой в научной компьютерной нотации:

// 1.23E4   => 1.23 * 10^4
// computer => scientific notation of a real number

кстати: 0.123e5 === 1.23e4 === 12.3e3 === 123e2 === 12300e0 === 12300.0

1 голос
/ 20 апреля 2019

Экспоненциальное число хранится как double .. потому что php не меняет тип данных для положительной экспоненциальной или отрицательной эспоненциальной

https://www.php.net/manual/en/language.types.float.php

тип данных такой же, как у

$c = 7E-10;

или

$c = 7E+10;

но первый тип это тип float

...