これらのタイプの値、'3'
、'2.34'
、'0.234343'
などを数値に変換したいです。 JavaScriptではNumber()
を使用できますが、PHPで利用可能な同様の方法はありますか?
Input Output
'2' 2
'2.34' 2.34
'0.3454545' 0.3454545
PHPはほとんどの状況であなたに代わって型を強制するので、通常これを行う必要はありません。明示的に型を変換したい場合は、 をキャスト してください。
$num = "3.14";
$int = (int)$num;
$float = (float)$num;
その方法はいくつかあります。
文字列を数値プリミティブデータ型にキャストします。
$num = (int) "10";
$num = (double) "10.12"; // same as (float) "10.12";
文字列に対して数学演算を実行します。
$num = "10" + 1;
$num = floor("10.1");
intval()
または floatval()
を使用します。
$num = intval("10");
$num = floatval("10.1");
settype()
を使用してください。
どんな(ゆるくタイプされた)言語でも、あなたはそれにゼロを加えることによっていつでも文字列を数にキャストすることができます。
ただし、PHPはこの変数を使用するときに自動的に実行され、出力時にとにかく文字列にキャストされるため、これにはほとんど意味がありません。
浮動小数点数にキャストした後は、浮動小数点数の性質上、予測不能に変更される可能性があるため、ドット付き数字を文字列として保持することをお勧めします。
問題を避けるために intval($var)
を試してください。いくつかの例:
<?php
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('42'); // 42
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34 (octal as starts with zero)
echo intval('042'); // 42
echo intval(1e10); // 1410065408
echo intval('1e10'); // 1
echo intval(0x1A); // 26 (hex as starts with 0x)
echo intval(42000000); // 42000000
echo intval(420000000000000000000); // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8); // 42
echo intval('42', 8); // 34
echo intval(array()); // 0
echo intval(array('foo', 'bar')); // 1
?>
あなたが使用することができます:
(int)(your value);
またはあなたが使用することができます:
intval(string)
$value = '0.4'
にfloatを取得したいが、$value = '4'
にintを取得したい場合は、次のように書くことができます。
$number = ($value == (int) $value) ? (int) $value : (float) $value;
少し汚れていますが、動作します。
PHP では、文字列を数値に変換するためにintval(string) or floatval(string)
関数を使うことができます。
string
をint
に変換するかfloat
に変換するかを選択する代わりに、単に0
を追加するだけで、PHPが自動的に結果を数値型に変換します。
// Being sure the string is actually a number
if (is_numeric($string))
$number = $string + 0;
else // Let the number be 0 if the string is not a number
$number = 0;
あなたはいつでもそれにゼロを加えることができます!
Input Output
'2' + 0 2 (int)
'2.34' + 0 2.34 (float)
'0.3454545' + 0 0.3454545 (float)
いくつかのケースで有用でより安全であることができる答えへのほんの少しのメモ。最初に文字列に実際に有効な数値が含まれているかどうかを確認し、それを数値型に変換します(たとえば、intを文字列に変換するdbからのデータを操作する必要がある場合など)。 is_numeric()
を使用してからfloatval()
を使用できます。
$a = "whatever"; // any variable
if (is_numeric($a))
var_dump(floatval($a)); // type is float
else
var_dump($a); // any type
これはあなたが探しているものを達成する機能です。まず、値が数値として理解できるかどうかをチェックし、そうであれば、それをintとfloatに変換します。 intとfloatが同じ場合(例えば5 == 5.0)、int値を返します。 intとfloatが同じでない場合(例えば5!= 5.3)、floatの精度が必要であると仮定してその値を返します。値が数値ではない場合、警告をスローしてnullを返します。
function toNumber($val) {
if (is_numeric($val)) {
$int = (int)$val;
$float = (float)$val;
$val = ($int == $float) ? $int : $float;
return $val;
} else {
trigger_error("Cannot cast $val to a number", E_USER_WARNING);
return null;
}
}
これは私が自分自身のために物事を単純化するために書いた関数です:
また、boolean、integer、double、realの短縮形も返します。
function type($mixed, $parseNumeric = false)
{
if ($parseNumeric && is_numeric($mixed)) {
//Set type to relevant numeric format
$mixed += 0;
}
$t = gettype($mixed);
switch($t) {
case 'boolean': return 'bool'; //shorthand
case 'integer': return 'int'; //shorthand
case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
default: return $t;
}
}
ParseNumericをtrueに設定してtypeを呼び出すと、typeをチェックする前に数値文字列が変換されます。
したがって:
type( "5"、true)はintを返します
type( "3.7"、true)はfloatを返します
type( "500")は文字列を返します
これは一種の誤ったチェック方法であり、実際の変数は依然として文字列なので、注意してください。必要に応じて、実際の変数を正しい型に変換する必要があります。データベースがアイテムIDまたはエイリアスをロードするかどうかを確認するために必要なだけです。実行時に文字列として解析されるため、予期しない影響はありません。
編集
オブジェクトが関数であるかどうかを検出したいのであれば、このケースをスイッチに追加してください。
case 'object': return is_callable($mixed)?'function':'object';
Boykodevの答え に加えて、私はこれを提案します。
Input Output
'2' * 1 2 (int)
'2.34' * 1 2.34 (float)
'0.3454545' * 1 0.3454545 (float)
$num = "3.14";
$int = (int)$num; // Output = 3
$float = (float)$num; // Output = 3.14
$double = (double)$num; // Output = 3.14
キャストを使用してPHP内の文字列を数値に変換できます。
JavaScriptでは、文字列を数値に変換する簡単な方法は1を掛けることです。 "+"記号はJavaScriptでは複数の用途に使用されますが、 "*"記号は純粋に純粋です。数学的な乗算のために。
ここで私がPHPを数字として含む文字列を自動的に解釈しても構わないと思っていたこと(および追加についてのコメントはPHPでは "+"は純粋に数学的な加算のために、この乗算トリックはPHPにもうまく働きます。
私はそれをテストしました、そしてそれはうまくいきます...あなたが文字列をどのように取得したかによりますが、1を掛ける前に、それにtrim()関数を適用したいかもしれません。
そうです、PHPにも似たような方法がありますが、ほとんど知られていないので、それについてはほとんど聞かれません。ここに記述されているように、それは "identity"と呼ばれる算術演算子です。
数値文字列を数値に変換するには、次のようにします。
$a = +$a;
単にあなたはこのように書くことができます:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
文字列をint型に変換するには、 intval()
関数を使用するだけです。
$a = "10";
$b = (int)$a;
これを使用して、 PHP で文字列をintに変換できます。
このようなものを使ってみてください。
<?php
$string = '5'; // The $ string is a variable to hold string '5'
$int = intval($string); // $int is the converted string to integer $int = intval('5');
echo $int; // 5
?>
あなたが使用することができます:
((int) $var) ( but in big number it return 2147483647 :-) )
しかし、最善の解決策は次のものを使うことです。
if (is_numeric($var))
$var = (isset($var)) ? $var : 0;
else
$var = 0;
または
if (is_numeric($var))
$var = (trim($var) == '') ? 0 : $var;
else
$var = 0;
あなたの特定のケースでは、PHPで文字列を数字に変換するために1を掛けることができます。 PHPは、浮動小数点と整数を自動的に処理します。
$num = "2.12";
var_dump(is_float($num)); // bool(false)
var_dump(is_int($num)); // bool(false)
var_dump(is_string($num)); // bool(true)
$num = $num*1;
var_dump(is_float($num)); // bool(true)
var_dump(is_int($num)); // bool(false)
var_dump(is_string($num)); // bool(false)
PHPは制限内でそれを行います
<?php
$str = "3.148";
$num = $str;
printf("%f\n", $num);
?>
次のようにデータ型を変更できます
$number = "1.234";
echo gettype ($number) . "\n"; //Returns string
settype($number , "float");
echo gettype ($number) . "\n"; //Returns float
歴史的な理由から、floatの場合は "double"が返されます。
すべての提案は数値型を失います。
これは私にはベストプラクティスのようです。
function str2num($s){
// Returns a num or FALSE
$return_value = !is_numeric($s) ? false : (intval($s)==floatval($s)) ? intval($s) :floatval($s);
print "\nret=$return_value type=".gettype($return_value)."\n";
}
プログラミングインタビューの中で、「PHPで整数を文字列にキャストするための組み込み関数を書いていたとしたら、その関数をどのように書くのか」という質問がありました。これが解決策です。
$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939;
$string = "";
while ($int) {
$string .= $nums[$int % 10];
$int = (int)($int / 10);
}
$result = strrev($string);
やり方がある:
$value = json_decode(json_encode($value, JSON_NUMERIC_CHECK|JSON_PRESERVE_ZERO_FRACTION|JSON_UNESCAPED_SLASHES), true);
variable
は:string
なので、is_*
を使用してもうまくいきません。
json_encode()
とそれに続くjson_decode()
の組み合わせを使って、それは "真の"形式に変換されます。もしそれが本当のstring
なら、それは間違って出力するでしょう。
$num = "Me";
$int = (int)$num;
$float = (float)$num;
var_dump($num, $int, $float);
出力します:string(2) "Me" int(0) float(0)
私は答えを読み続けてきましたが、誰もがPHPの数値変換における最大の警告に言及しているのを見ませんでした。
最も支持されている答えは以下の通りです。
$str = "3.14"
$intstr = (int)$str // now it's a number equal to 3
そりゃ素晴らしい。 PHPは直接キャストを行います。しかし、次のようにしたらどうなりますか?
$str = "3.14is_trash"
$intstr = (int)$str
PHPはそのような変換が有効であると見なしますか?
どうやらはい。
PHPは、必要な型の最初の数字以外の文字が見つかるまで文字列を読み取ります。整数の場合、数字は[0-9]です。その結果、3
が[0-9]の文字範囲内にあるため、読み続けます。 .
を読み取り、[0-9]の範囲にないためそこで停止します。
Floatまたはdoubleにキャストした場合も同様です。 PHPは3
、次に.
、次に1
、そして4
の順に読み取ります。有効なfloat数値ではないのでi
で停止します。
その結果、"million" >= 1000000
はfalseと評価されますが、"1000000million" >= 1000000
はtrue
と評価されます。
また見なさい:
https://www.php.net/manual/en/language.operators.comparison.php 比較中の変換方法
https://www.php.net/manual/en/language.types.string.php#language.types.string.conversion 文字列のしくみそれぞれの数値に変換