【PHP8.x】floatval関数の使い方

floatval関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

floatval関数は、引数として与えられた変数を浮動小数点数(float型)に変換し、その結果を返す関数です。この関数は、プログラム内で文字列として扱われている数値を計算に使いたい場合や、異なる型のデータを統一的に数値として扱いたい場合に非常に便利です。例えば、文字列の "123.45" を引数に渡すと、数値の 123.45 が返されます。整数の 100 は 100.0 に変換されます。文字列の変換には特徴があり、先頭から数値として解釈できる部分までが変換の対象となります。例えば "50.5 apples" という文字列は 50.5 になりますが、"start 100" のように数値で始まらない文字列を渡した場合は 0.0 が返されます。また、trueは1.0に、falsenullは0.0に変換されます。注意点として、空でない配列を引数に渡すと1.0が返され、空の配列の場合は0.0が返されます。このように、floatval関数は様々な型の値を安全に浮動小数点数へ変換するための基本的な機能を提供します。

構文(syntax)

1$float_result = floatval($value);

引数(parameters)

mixed $value

  • mixed $value: 浮動小数点数に変換したい値。整数、文字列、配列、オブジェクトなど、様々な型の値を受け取ることができます。

戻り値(return)

float

floatval関数は、指定された値を浮動小数点数(float型)に変換した結果を返します。

サンプルコード

PHP floatval() で浮動小数点数変換と精度を理解する

1<?php
2
3/**
4 * PHPのfloatval()関数の使用例と、浮動小数点数の精度(precision)に関する振る舞いを示すサンプルコードです。
5 * システムエンジニアを目指す初心者向けに、様々なデータ型がfloatに変換される様子と、
6 * 特に文字列から数値への変換における小数点以下の精度がどのように扱われるかを理解できるように構成されています。
7 */
8
9echo "--- floatval() の基本的な使用例 ---\n";
10
11// 整数を含む文字列を浮動小数点数に変換します。
12$stringValue1 = "12345";
13echo "文字列 '{$stringValue1}' を floatval() で変換: " . floatval($stringValue1) . "\n";
14
15// 小数を含む文字列を浮動小数点数に変換します。
16$stringValue2 = "98.765";
17echo "文字列 '{$stringValue2}' を floatval() で変換: " . floatval($stringValue2) . "\n";
18
19// 文字列の先頭から数値として認識できる部分までを浮動小数点数に変換します。
20// 'abc' の部分は数値ではないため無視されます。
21$stringValue3 = "3.14abc";
22echo "文字列 '{$stringValue3}' を floatval() で変換: " . floatval($stringValue3) . "\n";
23
24// 論理値 (boolean) を浮動小数点数に変換します。
25echo "true を floatval() で変換: " . floatval(true) . "\n";   // true は 1.0 に変換されます。
26echo "false を floatval() で変換: " . floatval(false) . "\n"; // false は 0.0 に変換されます。
27
28// null を浮動小数点数に変換します。
29echo "null を floatval() で変換: " . floatval(null) . "\n\n"; // null は 0.0 に変換されます。
30
31
32echo "--- floatval() と浮動小数点数の精度 (precision) の例 ---\n";
33
34// PHPのfloat型は、通常IEEE 754倍精度浮動小数点数として実装されており、
35// 約15桁程度の10進数精度を持ちます。これを超える桁数の小数を変換すると、
36// 内部的に精度が失われる可能性があります。
37
38// 非常に長い小数部を持つ文字列を用意します (25桁の小数)。
39$longDecimalString = "0.1234567890123456789012345";
40
41// floatval() で浮動小数点数に変換します。
42$floatValue = floatval($longDecimalString);
43
44echo "元の文字列 (25桁):             " . $longDecimalString . "\n";
45echo "floatval() 変換後の値 (デフォルト表示): " . $floatValue . "\n"; // PHPのデフォルト表示精度に依存します。
46
47// sprintf() を使用して、floatValueの内部的な値をより高い精度で表示します。
48// これにより、元の文字列との違い、つまり精度がどのように失われたかを確認できます。
49// "%.25F" は小数点以下25桁まで浮動小数点数を表示する書式指定子です。
50echo "floatval() 変換後の値 (sprintfで高精度表示): " . sprintf("%.25F", $floatValue) . "\n";
51
52/*
53 * 精度に関する追加の注意点:
54 * 上記の例から、元の文字列のすべての桁が正確にfloat型に保持されるわけではないことがわかります。
55 * 特に金融計算など厳密な精度が必要な場合は、BCMathなどの任意精度計算ライブラリの使用を検討してください。
56 */
57
58?>

PHPのfloatval()関数は、引数として渡された任意の型の値(mixed $value)を浮動小数点数(float型)に変換して返します。この関数は、文字列、論理値、nullなど、さまざまなデータ型を浮動小数点数として扱いたい場合に利用されます。

例えば、整数や小数を表す文字列は、それぞれ対応する浮動小数点数に変換されます。文字列の場合、先頭から数値と認識できる部分のみが変換対象となり、それ以降の数値ではない文字は無視されます。論理値のtrue1.0に、falsenull0.0に変換されるのが基本的な挙動です。

浮動小数点数には精度(precision)の限界があり、PHPのfloat型は通常、IEEE 754倍精度浮動小数点数として実装され、約15桁程度の10進数精度を持ちます。そのため、非常に長い小数部を持つ文字列をfloatval()で変換すると、この精度を超える部分は正確に保持されず、変換後の値で一部の桁が失われる可能性があります。厳密な精度が求められる計算、例えば金融関連の計算などでは、BCMathのような任意精度計算ライブラリの使用をご検討ください。

floatval()関数は、引数の値を浮動小数点数に変換します。文字列からの変換では、先頭から数値として認識できる部分のみが対象となり、論理値のtrue1.0に、falsenull0.0に変換されます。特に注意すべきは、PHPのfloat型は約15桁程度の10進数精度しか持たない点です。そのため、これを超える長い小数を含む値を変換すると、内部で精度が失われる可能性があります。金融計算など厳密な数値精度が求められる場面では、BCMathなどの任意精度計算ライブラリの利用を強く検討してください。

PHP floatval カンマ区切り文字列の挙動

1<?php
2
3/**
4 * PHP 8におけるfloatval関数がカンマ区切りの数値文字列を
5 * どのように処理するかを示すサンプルコードです。
6 *
7 * floatval()関数は、文字列の先頭から数値として解釈できる部分を抽出し、
8 * 最初の非数値文字(カンマやアンダースコアなど)が現れた時点で変換を停止します。
9 * したがって、カンマを含む文字列を意図通りに数値変換するには、
10 * 事前にカンマを除去するなどの処理が必要です。
11 */
12function demonstrateFloatvalWithComma(): void
13{
14    echo "--- floatval() 関数によるカンマ区切り文字列の処理 (PHP 8) ---\n";
15    echo "※ floatval() は文字列中のカンマを数値の一部とは見なしません。\n";
16    echo "   カンマが現れた時点で数値への変換処理が停止します。\n\n";
17
18    // ケース1: 単一のカンマを含む文字列
19    $valueWithSingleComma = "1,234.56";
20    echo "元の文字列:      \"{$valueWithSingleComma}\"\n";
21    $floatResult1 = floatval($valueWithSingleComma);
22    echo "floatval() 変換後: " . $floatResult1 . " (型: " . gettype($floatResult1) . ")\n\n";
23
24    // ケース2: 複数のカンマを含む文字列
25    $valueWithMultipleCommas = "1,000,000.78";
26    echo "元の文字列:      \"{$valueWithMultipleCommas}\"\n";
27    $floatResult2 = floatval($valueWithMultipleCommas);
28    echo "floatval() 変換後: " . $floatResult2 . " (型: " . gettype($floatResult2) . ")\n\n";
29
30    // ケース3: アンダースコアを含む文字列
31    // (数値リテラルではセパレータとして機能するが、floatvalでは非数値文字として扱われる)
32    $valueWithUnderscore = "1_234.56";
33    echo "元の文字列:      \"{$valueWithUnderscore}\"\n";
34    $floatResult3 = floatval($valueWithUnderscore);
35    echo "floatval() 変換後: " . $floatResult3 . " (型: " . gettype($floatResult3) . ")\n\n";
36
37    // ケース4: カンマを含まない通常の数値文字列
38    $valueNormal = "987.65";
39    echo "元の文字列:      \"{$valueNormal}\"\n";
40    $floatResult4 = floatval($valueNormal);
41    echo "floatval() 変換後: " . $floatResult4 . " (型: " . gettype($floatResult4) . ")\n\n";
42
43    // ケース5: 数値として認識できない文字が先頭にある場合
44    $valueInvalidPrefix = "ABC123.45";
45    echo "元の文字列:      \"{$valueInvalidPrefix}\"\n";
46    $floatResult5 = floatval($valueInvalidPrefix);
47    echo "floatval() 変換後: " . $floatResult5 . " (型: " . gettype($floatResult5) . ")\n\n";
48
49    echo "--- カンマを含む文字列を正確に変換する方法の例 ---\n";
50    $valueToClean = "1,234,567.89";
51    echo "元の文字列:      \"{$valueToClean}\"\n";
52
53    // str_replace() を使用してカンマを除去
54    $cleanedValue = str_replace(',', '', $valueToClean);
55    echo "カンマ除去後:    \"{$cleanedValue}\"\n";
56
57    // カンマ除去後の文字列を floatval() で変換
58    $finalFloatValue = floatval($cleanedValue);
59    echo "floatval() 変換後: " . $finalFloatValue . " (型: " . gettype($finalFloatValue) . ")\n";
60}
61
62// 関数を実行して結果を表示
63demonstrateFloatvalWithComma();

PHP 8のfloatval関数は、引数として与えられた値を浮動小数点数(float型)に変換して返します。引数$valuemixed型であり、数値、文字列、ブール値など様々な型の値を指定できます。

この関数は、特に文字列を数値に変換する際、文字列の先頭から数値として解釈できる部分を抽出し、最初の非数値文字(数字、小数点、符号以外の文字)が現れた時点で変換を停止するという特徴があります。そのため、"1,234.56"や"1_234.56"のようにカンマやアンダースコアを含む数値文字列を直接floatvalで変換すると、カンマやアンダースコアより前の部分のみが数値として認識されます。例えば、"1,234.56"は「1」として、"1_234.56"も「1」として変換されてしまいます。

正確な浮動小数点数を得るためには、str_replace関数などを用いて事前に文字列からカンマやその他の不要な非数値文字を除去しておく必要があります。例えば、"1,234,567.89"という文字列を変換したい場合は、まずstr_replace(',', '', "1,234,567.89")で"1234567.89"に整形し、その結果をfloatval関数に渡すことで、意図通りの浮動小数点数「1234567.89」が得られます。このように、floatvalは単純な数値変換に便利ですが、入力データの形式には注意が必要です。

PHPのfloatval関数は、与えられた文字列の先頭から数値として認識できる部分を抽出し、最初の非数値文字(カンマやアンダースコアなど)が現れた時点で変換を停止します。したがって、「1,234.56」のようなカンマ区切りの数値文字列を直接floatvalで変換すると、カンマ以降が無視され「1」として処理されます。意図通りにカンマ区切りの数値を浮動小数点数として扱うためには、str_replace関数などを用いて事前にカンマを除去してからfloatvalを適用してください。この手順を踏むことで、文字列内の区切り文字に惑わされることなく、安全かつ正確な数値変換が実現できます。変換結果が予期せぬ値にならないよう、入力文字列の形式を常に意識することが重要です。

関連コンテンツ

【PHP8.x】floatval関数の使い方 | いっしー@Webエンジニア