Here's a way to parse a decimal (eg 3.25) into an integer and exponent:
<?
if (preg_match("/^[0-9]+\.[0-9]+$/",$input)){
//Input is a base-10 decimal. Multiply as necessary to remove the decimal
//point. Convert that to a gmp_resource, then decrement the exponent
//to compensate.
$pieces=explode(".", $input); //Split at the d.p.
$input="$pieces[0]$pieces[1]"; //Remove the decimal point.
$input=ltrim($input,'0');
//Remove any leading zeros, or gmp_init will parse the number as octal.
if ($input==''){ //Deal with "0.0" which would otherwise be ''.
$input=0;
}
$integer=gmp_init($input);
$ns_exponent=-strlen($pieces[1]);
//exponent = (-) the number of characters after the decimal point.
}
?>
PHP.mk документација
gmp_init
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
function.gmp-init.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
function.gmp-init.php
gmp_init
Референца за `function.gmp-init.php` со подобрена типографија и навигација.
gmp_init
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
gmp_init — Креирај GMP број
Параметри
num- Цел број или стринг. Репрезентацијата на стринг може да биде децимална, хексадецимална, октална или бинарна.
base-
Основата што треба да се користи за конвертирање на string representation.
Експлицитна основа може да биде помеѓу
2and62. За основи до36, случајот се игнорира; големите и малите букви имаат иста вредност. За основи37to62, големите букви ги претставуваат вредностите10to35а малите букви ги претставуваат вредностите36to61. Враќаbaseis0тогаш вистинската основа се одредува од водечките карактери наnum. Ако првите два карактери се0xor0X, стринг се толкува како хексадецимален цел број. Ако првите два карактери се0bor0B, стринг се толкува како бинарен цел број. Ако првите два карактери се0oor0o, стринг се толкува како октален цел број. Покрај тоа, ако првиот карактер е0, стринг исто така се толкува како октален цел број. Во сите други случаи, стринг се толкува како децимален цел број.
Вратени вредности
А GMP object.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.1.0 |
Поддршка за експлицитни октални префикси 0o and
0o е додадена за num стрингови. Толлкување на такви префикси кога base is
0 исто така е додадено.
|
Примери
Пример #1 Креирање на GMP број
<?php
$a = gmp_init(123456);
$b = gmp_init("0xFFFFDEBACDFEDF7200");
?>Белешки
Забелешка:
Не е потребно да се повика оваа функција за да се користат цели броеви или низи наместо GMP броеви во GMP функции (како на пример со gmp_add()). Аргументите на функцијата автоматски се претвораат во GMP броеви, ако таква конверзија е можна и потребна, користејќи исти правила како gmp_init().
Види Исто така
- (PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8) - Креирај GMP број
Белешки од корисници Управување со PDO конекции
php на richardneill точка org ¶
19 години пред
GMP::__construct() ¶
пред 14 години
Unless the base is 16, gpm_init will fail if the string begins with "0b".
> php -r '$v = gmp_init("b83", 17); print("$v\n");'
Resource id #4
> php -r '$v = gmp_init("0b83", 17); print("$v\n");'
[nothing prints]
In may case, where I am explicitly specifying the base, the solution is to apply ltrim first:
> php -r '$v = gmp_init(ltrim("0b83", "0"), 17); print("$v\n");'
Resource id #4
clcollie на mindspring точка com ¶
пред 14 години
I discovered that the gmp functions use [0-9a-f] up to base 16, but [0-9A-Za-z] (i.e. upper case first) from bases 17 to 62. This differs from most of the base-62 implementations I've found that tend to use lower case first.
RPaseur at NationalPres dot org ¶
3 години пред
Missing from the documentation: gmp_init() return false in case it failed to parse $num
<?php
var_dump(gmp_init(""));
// returns "bool(false)" and not a GMP object as hinted by the documentation, it also triggers a Warning "PHP Warning: gmp_init(): Unable to convert variable to GMP - string is not an integer in php shell code on line 1"
?>
karl dot debisschop at pearson dot com ¶
19 години пред
gmp_* functions don't accept strings with a leading '+':
<?php
echo gmp_strval(gmp_init('+42')); #0
echo gmp_strval(gmp_add('42', '+42')); #42
echo bcadd('+42', '+42'); #84
?>
php на richardneill точка org ¶
19 години пред
Note: Leading zeros will make gmp_init parse this as octal.
Thus gmp_init(010) becomes 8.
$a=010; //8
$b="010" + 0; //10
$c=gmp_strval(gmp_init(010)); //8
$d=gmp_strval(gmp_init("010")); //8
This behaviour is inconsistent: either $d should equal $b, or
$b should equal $a.
thomas точка hebinck на digionline точка de ¶
20 години пред
If you call a gmp_* function directly with an interger as parameter, this integer MUST NOT be 0:
for($i=-1;$i<=1;$i++) { echo gmp_strval(gmp_add(2,gmp_mul(1,$i))) . ' '; }
The result is 1 0 3 (wrong)
In this case you have to use gmp_init():
for($i=-1;$i<=1;$i++) { echo gmp_strval(gmp_add(2,gmp_mul(1,gmp_init($i)))) . ' '; }
The result is 1 2 3 (right)
Happy number crunching! :-)