[PHP] 数値に関する関数たち

PHP: Math - Manualを参考に、abs(), max(), min(), ceil(), floor(), round(), number_format(), decbin(), decoct(), dechex(), bindec(), octdec(), hexdec() を動かしてみる

abs()

PHP: abs - Manual:絶対値を求める

<?php
var_dump(abs(-1));
var_dump(abs(-1.0));
var_dump(abs(-1E-10));
var_dump(abs("-1.0"));
var_dump(abs("-1E-1"));

結果

int 1
float 1
float 1.0E-10
float 1
float 0.1

返り値の型に注意

max(), min()

PHP: max - Manual:最大値を返す

<?php
var_dump(
  max( array("1",2,3,4,"5",6) )
);
var_dump(
  min("1MIN",2,3,4,"5",6)
);
var_dump(
  max(array(-1, -1),array(0,-2))
);
var_dump(
  min(1,2,3,"文字列")
);

結果

int 6
string '1MIN' (length=4)
array
  0 => int 0
  1 => int -2
string '文字列' (length=9)

数値として解釈できるものは数値に解釈してくれる。でも文字列は解釈された数値が帰ってくるわけではなく文字列としてそのまま返ってくる

ceil(), floor(), round()

  • PHP: ceil - Manual:端数の切り上げ
  • PHP: floor - Manual:端数の切捨て
  • PHP: round - Manual:浮動小数点を丸める

    <?php
    var_dump(ceil(1.01));
    var_dump(ceil("0.000001HOGE"));
    var_dump(floor("TEST"));
    var_dump(floor(array()));
    
    echo "----\n";
    var_dump(round(0.555));
    var_dump(round(0.555, 1));
    var_dump(round(0.555, 2));
    var_dump(round(5, -1));
    
    echo "----\n";
    var_dump(round(0.5, 0, PHP_ROUND_HALF_UP));
    var_dump(round(0.5, 0, PHP_ROUND_HALF_DOWN));
    var_dump(round(5.5, 0, PHP_ROUND_HALF_EVEN));
    var_dump(round(6.5, 0, PHP_ROUND_HALF_EVEN));
    var_dump(round(5.5, 0, PHP_ROUND_HALF_ODD));
    var_dump(round(6.5, 0, PHP_ROUND_HALF_ODD));
    

結果

float 2
float 1
float 0
boolean false
----
float 1
float 0.6
float 0.56
float 10
----
float 1
float 0
float 6
float 6
float 5
float 7

ceil(), floor() の返り値は float型の整数値のみ。round() の第3引数の定数はPHP: 定義済み定数 - Manualを参照。またround()は完全な四捨五入などはできず誤差がある。マニュアルには書いてなかったけど受付できない引数を入れると false が返ってくる。

number_format

PHP: number_format - Manual:数値関数ってより文字列関数だけどいちおう

<?php
echo number_format(9000000.12345678), "\n";
echo number_format(9000000.12345678, 6), "\n";
echo number_format(9000000.12345678, 6, "|", "#"), "\n";

// パラメータ3つはダメ
echo number_format(7000.000000, 3, ".");

結果

9,000,000
9,000,000.123457
9#000#000|123457

( ! ) Warning: Wrong parameter count for number_format() in *** on line 7

※進数

関数の前に英単語の勉強

  • 2進数 binary digit
  • 8進数 octal numeral
  • 10進数 decimal number
  • 16進数 hex number, hexadecimal number

decbin(), decoct(), dechex()

結果

---- 100 ----
string '1100100' (length=7)
string '144' (length=3)
string '64' (length=2)
---- -2 ----
string '11111111111111111111111111111110' (length=32)
string '37777777776' (length=11)
string 'fffffffe' (length=8)

2,8,16進数を10進数に変換

  • PHP: bindec - Manual
  • PHP: octdec - Manual
  • PHP: hexdec - Manual

    <?php
    var_dump(bindec("10"));
    var_dump(octdec("10"));
    var_dump(hexdec("10"));
    
    // 文字列以外は入れないほうがいいよ
    var_dump(bindec(1E-100));
    
    // 8進数で使わない文字は無視される
    var_dump(octdec("8190a0"));
    
    // 16進数で使わない文字は無視される
    var_dump(hexdec("X1Y0Z0"));
    

結果

int 2
int 8
int 16
int 20
int 64
int 256
Share
関連記事