bcmod

(PHP 4, PHP 5, PHP 7, PHP 8)

bcmodKeyfi duyarlıklı sayılarda bölme işleminden kalanı bulur

Açıklama

bcmod(string $sayı1, string $sayı2, ?int $basamak = null): string

sayı1'in sayı2'ye bölünmesinden kalanı döndürür. Sonuç sayı1'in işaretini alır.

Bağımsız Değişkenler

sayı1

Dizge olarak sol terim.

sayı2

Dizge olarak sağ terim.

basamak
Bu bağımsız değişken, sonuçtaki ondalık iminden sonraki basamak sayısını ayarlamak için kullanılır. Değeri null ise, bcscale() ile atanan öntanımlı basamak sayısı veya son çare olarak bcmath.scale INI yönergesinin değeri kullanılır.

Dönen Değerler

Dizge olarak kalanı döndürür.

Hatalar/İstisnalar

Bu işlev aşağıdaki durumlarda ValueError istisnası oluşturur:

  • sayı1 veya sayı2 iyi biçimlenmiş BCMath sayısal dizgesi değilse.
  • basamak geçerli aralığın dışındaysa.

sayı1 0 ise DivisionByZeroError istisnası oluşur.

Sürüm Bilgisi

Sürüm: Açıklama
8.0.0 basamak artık null olabiliyor.
8.0.0 0 ile bölme, null döndürmek yerine artık DivisionByZeroError istisnasına sebep oluyor.
7.2.0 sayı1 ve sayı2 artık ondalık kısmı kırpılıp tamsayı yapılmıyor. Dolayısıyla, işlev artık % işleci gibi değil fmod() gibi davranıyor.
7.2.0 basamak bağımsız değişkeni eklendi.

Örnekler

Örnek 1 - bcmod() örneği

<?php
bcscale
(0);
echo
bcmod( '5', '3'); // 2
echo bcmod( '5', '-3'); // 2
echo bcmod('-5', '3'); // -2
echo bcmod('-5', '-3'); // -2
?>

Örnek 2 - Ondalık basamaklarla bcmod()

<?php
bcscale
(1);
echo
bcmod('5.7', '1.3'); // PHP 7.2.0 ve sonrası 0.5 - öncesi 0
?>

Ayrıca Bakınız

  • bcdiv() - İki keyfi duyarlıklı sayıyı böler
  • bcdivmod() - Keyfi hassasiyetli bir sayının bölümünü ve kalanını verir
  • BcMath\Number::mod() - Gets the modulus of an arbitrary precision number

add a note

User Contributed Notes 2 notes

up
4
lauris at night dot lt
21 years ago
<?php
/**
* my_bcmod - get modulus (substitute for bcmod)
* string my_bcmod ( string left_operand, int modulus )
* left_operand can be really big, but be carefull with modulus :(
* by Andrius Baranauskas and Laurynas Butkus :) Vilnius, Lithuania
**/
function my_bcmod( $x, $y )
{
// how many numbers to take at once? carefull not to exceed (int)
$take = 5;
$mod = '';

do
{
$a = (int)$mod.substr( $x, 0, $take );
$x = substr( $x, $take );
$mod = $a % $y;
}
while (
strlen($x) );

return (int)
$mod;
}

// example
echo my_bcmod( "7044060001970316212900", 150 );
?>
up
1
drahoszdenek at gmail dot com
12 years ago
The modulus can be only integer. For "floats" bcmod returns 0:

<?php
echo bcmod('10', '2.1'); // 0
?>

For real modulus you can use BN-PHP project (hosted at Bitbucket):

<?php
$eval
= new \BN\Expression\ExpressionEvaluator();
$operators = new \BN\Expression\OperatorsFactory();
$eval->setOperators($operators->getOperators(array('%')));

echo
$eval->evaluate('10 % 2.1'); // 1.6
echo $eval->evaluate('10 % -2.1'); // 1.6
echo $eval->evaluate('-10 % 2.1'); // -1.6
echo $eval->evaluate('-10 % -2.1'); // -1.6
?>
To Top