下記のソースは、数値を2進数の正規表現で認識した後、マッチした部分を境に指定した文字列を分割させるpreg_splitで、分割された2進数の数値それぞれに、正数の2^x或いは、負数の2^-xを掛け10進数にしようと思ったのですが、
小数点に対応しきれません。
分割する正規表現の条件は、まだ読んでいない右部分に数値があって、既に読んだ部分に数値がある位置です。数値と数値の間に小数点が入るとこの条件が満たせなくなり、
分解された数値が入る配列に「x.y」のような値が代入されてしまうのです。どうすると、小数点があった場合も含めた「まだ読んでいない右部分に数値があって、既に読んだ部分に数値がある位置」という条件を作れるのでしょうか。
php
1function henkan($nisinsu) { 2 //二進数を受け取ったら、数字を一つ一つ分解し、2^-x乗の計算をする。小数の二進数の可能性もあるので\.で対応する。 3 //マッチした部分を境に区切るのがpreg_splitなので数値と数値の間の"位置"にマッチするよう作る。 4 5 //先読みでまだ、読んでいない右側の部分に数値があり、尚且つ既に読んだ左側に数値がある位置にマッチする。 6 //また先読みカッコ、後読みカッコの間には、0回から1回だけという限定的な条件で、文字の「.」とそれに連なる数字が一個(.x)あってもマッチする。 7 $result = preg_split("/(?=\d)(\.)?(?<=\d)/", $nisinsu); 8 9 print "●result: ●result[0]「".$result[0].//1 10 "」●result[1]「 ".$result[1].//0 11 "」●result[2]「 ".$result[2].//1.1 12 "」●result[3]「 ".$result[3]."」<hr>";//空。本来ここに101.1の小数点第一位である1が来てほしい 13 14} 15 16print henkan(101.1);
回答2件
あなたの回答
tips
プレビュー