現在の言語: 日本語

戻る

float型
php型宣言

phpで使用する型宣言のfloat型について
倍精度浮動小数点数として扱われます。
浮動小数点数は通常64ビットのIEEE 754倍精度フォーマットで実装されており、メモリサイズは8バイトです。
14桁から15桁の十進数の精度
環境依存となりますが、表現範囲は約1.8e308 までの範囲となります。

[サンプル]

copy
class test1
{
  function test1()
  {
      $num1 = 0.1;
      $num2 = 0.7;
      $result =$num1 + $num2;
      //環境によっては「0.7999999999999999」となることがあるようです。
      echo "result(num1 + num2):$result".PHP_EOL;//このテスト環境:result(num1 + num2):0.8
      $num1 = 0.100000;
      $num2 = 0.700000;
      $result =$num1 + $num2;
      echo "result(num1 + num2):$result".PHP_EOL;//このテスト環境:result(num1 + num2):0.8
      $result = bcadd("0.1", "0.7", 1);
      echo "result(bcadd):$result".PHP_EOL;//このテスト環境:result(bcadd):0.8
  }
  function test2()
  {
    $money1 = 100.5;
    $money2 = 50.3;
    $multiple = 10;
    $tmp1 =$money1 * $multiple;
    $tmp2 =$money2 * $multiple;
    $tmp =$tmp1 + $tmp2;
    $total = $tmp / $multiple;
    echo "total:$total".PHP_EOL;//total:150.8
  }
  function test3()
  {
    $num = 0.123456789;
    echo "num:$num".PHP_EOL;//num:0.123456789
    //フォーマット指定子(%.nf)
    printf("%f", $num).PHP_EOL;//0.123457
    printf("%.0f", $num).PHP_EOL;//0
    printf("%.1f", $num).PHP_EOL;//0.1
    printf("%.2f", $num).PHP_EOL;//0.12
    printf("%.3f", $num).PHP_EOL;//0.123
    printf("%.4f", $num).PHP_EOL;//0.1235
    printf("%.5f", $num).PHP_EOL;//0.12346
    printf("%.6f", $num).PHP_EOL;//0.123457
    printf("%.7f", $num).PHP_EOL;//0.1234568
  }
}
echo "<pre>";

$cls1 = new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
echo "</pre>";
copy
class test1
{
	function test1()
	{
		$num1 = 0.1;
		$num2 = 0.7;
		$result =$num1 + $num2;
		//Depending on the environment, the result may be "0.79999999999999999."
		echo "result(num1 + num2):$result".PHP_EOL;//This test environment:result(num1 + num2):0.8
		$num1 = 0.100000;
		$num2 = 0.700000;
		$result =$num1 + $num2;
		echo "result(num1 + num2):$result".PHP_EOL;//This test environment:result(num1 + num2):0.8
		$result = bcadd("0.1", "0.7", 1);
		echo "result(bcadd):$result".PHP_EOL;//This test environment:result(bcadd):0.8
	}
	function test2()
	{
		$money1 = 100.5;
		$money2 = 50.3;
		$multiple = 10;
		$tmp1 =$money1 * $multiple;
		$tmp2 =$money2 * $multiple; 
		$tmp =$tmp1 + $tmp2; 
		$total = $tmp / $multiple; 
		echo "total:$total".PHP_EOL;//total:150.8 
	} 
	function test3() 
	{ 
		$num = 0.123456789; 
		echo "num:$num".PHP_EOL;//num:0.123456789 
		//Format specifier (%.nf) 
		printf("%f", $num).PHP_EOL;//0.123457 
		printf("%.0f", $num).PHP_EOL;//0 
		printf("%.1f", $num).PHP_EOL;//0.1 
		printf("%.2f", $num).PHP_EOL;//0.12 
		printf("%.3f", $num).PHP_EOL;//0.123 
		printf("%.4f", $num).PHP_EOL;//0.1235 
		printf("%.5f", $num).PHP_EOL;//0.12346 
		printf("%.6f", $num).PHP_EOL;//0.123457 
		printf("%.7f", $num).PHP_EOL;//0.1234568 
	}
}
echo "<pre>";

$cls1 = new test1();
$cls1->test1();
$cls1->test2();
$cls1->test3();
echo "</pre>";

浮動小数点数の誤差により丸め誤差が生じることがあります。
$num1 = 0.1;
$num2 = 0.7;
$result =$num1 + $num2;
このテスト環境では0.8でしたが
環境によっては「0.7999999999999999」となることがあるようです。
正確な計算を行う必要がある場合は、PHPのBC Math関数を使用するなど工夫が必要となります。
bcadd(BC Math 関数)
$result = bcadd("0.1", "0.7", 1);
浮動小数点数ではなく文字列として数値を扱い、誤差なく正確な計算結果を得ることができます。
計算したい数値を文字列として渡します。
計算結果は文字列で受け取ります。
test2()
小数点桁数を整数にして計算後、元の桁数に戻す方法です。
この例では小数点1桁を10倍することで整数にしています。
その後、各数字の計算をした結果を
10倍したものをもとに戻すので10で割っています。
test3()
出力桁数を制御する方法です。
printf関数を使用したテスト結果となります。
フォーマット指定子
%.(桁数の数字)f
によって小数点以下の桁数を指定できます。

copy
class test2
{
  function casetInt()
  {
    $float = 2.3;
    $int = 8;
    $total = $float + $int;
    echo "total:$total".PHP_EOL;//total:10.3
  }
  function castString()
  {
    $float = 7.5;
    $str = "2.5";
    $total = $float + $str;
    echo "total:$total".PHP_EOL;//total:10
  }
  function castBool()
  {
    $float =9.0;
    $bool = true;
    $total = $float + $bool;
    echo "total:$total".PHP_EOL;//total:10
  }
  function castNull()
  {
    $float = 1.23;
    $total = $float + null;
    echo "total:$total".PHP_EOL;//total:1.23
  }

}
echo "<pre>";

$cls2 = new test2();
$cls2->casetInt();
$cls2->castString();
$cls2->castBool();
$cls2->castNull();

echo "</pre>";
copy
class test2
{ 
	function caseInt() 
	{ 
		$float = 2.3; 
		$int = 8; 
		$total = $float + $int; 
		echo "total:$total".PHP_EOL;//total:10.3 
	} 
	function castString() 
	{ 
		$float = 7.5; 
		$str = "2.5"; 
		$total = $float + $str; 
		echo "total:$total".PHP_EOL;//total:10 
	} 
	function castBool() 
	{ 
		$float =9.0; 
		$bool = true; 
		$total = $float + $bool; 
		echo "total:$total".PHP_EOL;//total:10 
	} 
	function castNull() 
	{ 
		$float = 1.23; 
		$total = $float + null; 
		echo "total:$total".PHP_EOL;//total:1.23 
	}

}
echo "<pre>";

$cls2 = new test2();
$cls2->casetInt();
$cls2->castString();
$cls2->castBool();
$cls2->castNull();

echo "</pre>";
int型
int型の数字をfloat型の数字と計算をした場合
int型はfloat型に自動変換した数字を計算します。

string型
string型の数字をfloat型の数字と計算をした場合
string型は自動変換した数字を計算として使用されます。
floatとint以外のスカラ型を計算しようとした場合も、同様に数値型への自動変換が行われます。

bool型
trueは1
falseは0
に自動変換します。その結果をfloat型の計算をすることになります。

null型
nullは0に自動変換されます。



戻る

著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。