• ベストアンサー

整数かどうか判別できません。

やりたい事は小数点があるか無いかの判断です。 4100000000 の桁だと、is_intではfalseになってしまいます・・ 何か良いチェック方法はあるでしょうか? if(is_int(4100000000)) echo "整数です"; else echo "整数ではありません"; floor()では丸め誤差がでてしまい。小数点がある場合はfloor()を 使い、小数点がない場合、floor()を使わないようにしたいのです。

  • php4
  • お礼率42% (373/888)
  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 んと…質問内容としては「signed intのサイズを超える整数値をきちんと整数として認識したい」という内容でよいでしょうか? だとすると答えは「PHPでは無理」です。 非常に残念ではあるのですが。signed intを超えるサイズの場合、PHPは、内部で自動的にfloatに型変換してしまうので。 何らかのロジックを、九分九厘自力で組む必要があります。 ちなみに。単純に「大きな整数を扱いたい」場合、例えばGMP(GNU Multiple Precision)なんてものならあります。

php4
質問者

お礼

大変明確なご説明ありがとうございます。 4.1で割り算をし、floor()すると、999999999とかになって しまうので、round()で逃げるかもしれません。 PHPのint制約に、十分に気をつけて対処しますね。

その他の回答 (1)

  • gmataw
  • ベストアンサー率50% (12/24)
回答No.2

> やりたい事は小数点があるか無いかの判断です。 > 4100000000 > の桁だと、is_intではfalseになってしまいます・・ <?php $num = 4100000000; echo preg_match("/^\d+\.\d+$/", $num) ? 'yes' : 'no'; ?> こうゆう事ではなくて?

php4
質問者

お礼

やはりそうですか。ありがとうございます。 eregでやります。

関連するQ&A

  • 全角を半角にして、整数か小数か調べて最後の0を削除

    全角の数字が含まれた文字列を整数か小数かを判別して、 最後の余分な0を非表示にしたいです。 結果をこのようにさせたいです。 980.01 ←小数 3213.12 ←小数 3222.0003 ←小数 1000.2001 ←小数 2314 ←整数 1200.98 ←小数 2980 ←整数 2313.12 ←小数 3222.0003 ←小数 800 ←整数 4500 ←整数 <?php $ary = array( '980.0100', '3213.1200', '3222.0003', '1000.2001', '2314.0000', '1200.9800', '2980.0000', '2313.1200', '3222.0003', '0800.0000', '4500.0000' ); $count = count($ary); for($i=0; $i<$count; $i++){ $inputData = $ary[$i]; $hankaku = mb_convert_kana($inputData,'n',"utf-8"); if(!preg_match('/^0$|^-?[1-9][0-9]*$/', $hankaku)) { echo $hankaku.' ←小数'.'<br>'; } else { echo $hankaku.' ←整数'.'<br>'; } } ?>

    • ベストアンサー
    • PHP
  • 整数かどうかチェックする

    テキストボックスに数字を入力させてボタンを押した時、 その数字が1桁の整数(0から9)でなければエラーメッセージを出すようにしたいのですが、何か簡単なコードはありますか? (5.6などの小数や、"a"や"あ"など数字ではない文字が入力された場合も同様にエラーを出したい) 1つずつ0から9までifでチェックしなければいけないのでしょうか。

  • 異なるn個の整数からr個の整数を取り出す組み合わせ

    異なるn個の整数からr個の整数を取り出す組み合わせの数 nCrを求める関数 int combination(int n, int r){ /* ・・・ */} を作成せよ。なおnCrは以下のように定義される。 nCr = n-1Cr-1 + n-1Cr (ただし nC0 = nCn =1、nC1 =n ) (新版 明解C言語 入門編(柴田望洋 著) P.197 演習8-6) というので答えが int combination(int n, int r) { if((n>r) && (r>0)){ return combination(n-1,r-1) + combination(n-1,r); } else if(n==r || r==0){ return 1; } } ・という風になると教えてもらったのですがなぜこうなるのかが分かりません。 ・else if(n==r || r==0){ というのは削っても正常に動きますが、必要な物なのでしょうか? ・またifを使うときは if→eise if →else の順に使って 2つの時は if→else と使っていたのですが 上のものはif→else ifと書いています。 加えてelse(n==r || r==0){ と書いたらコンパイルエラーになってしまいました なぜelse ifと書くのでしょうか? 以上3点について教えてください。よろしくお願いいたします。

  • 整数の表現について

    もし、数字が整数だった場合はこのA処理を もし、数字が小数点を含む数字だった場合はB処理をというようなIF文を作りたいのですが”整数” ”小数点” をどのように表現するのか解りません。 どうか教えて頂けないでしょうか。 又、違う表現等があった場合もあるのでしょうかお願します。

  • Accessクエリの整数型と単精度型の演算について

    Accessのクエリで長整数型と単精度浮動小数点型を 加算すると答えが一致しません。理由を知っている人いますか? ちなみに長整数型と倍精度浮動小数点型を加算したときは答えが一致します。 浮動小数点は誤差がつきものなのは分かりますが、 確か単精度浮動小数点型は有効桁数7桁までのはず。 下記の例では問題ないように見えます。 (例)長整数型と単精度浮動小数型の演算:1000+0.20=1000.20000000298 長整数型と倍精度浮動小数型の演算:1000+0.20=1000.2 それではよろしくお願いします。

  • エクセルで整数表示と少数表示を混在させたい

    お世話になります。 集計用のファイルを作っています。 整数と、小数点以下1桁、2桁の数値が出てきます。 書式設定で小数点以下2桁まで表示するようにしたら、整数や小数点以下1桁の数値まで120.00とか25.50と表示されてしまい、見にくくなってしまいました。 小数点以下に0がつく場合は無視して、それぞれ120、25.5、3.25のように必要な桁数だけ表示させたいのですが、どうしたらよいでしょうか。

  • 入力値が小数なら、整数部・小数部の桁チェックをしたい。

    VB2005環境です。 テキストボックスに数値が入力された時、整数部分が4桁以上か、 小数部分が2桁以上になっている場合、警告メッセージを出したいと 考えています。 具体的には、 0.1→OK 99.9→OK 100.1→OK 0.01→NG 1001.9→NG 0.99→NG 1111→NG テキストボックスは数字以外の入力も許可しており、数字を 入力した場合だけのチェックです。 まずIsNumericで数値判定を行っているのですが、その後、上述の 小数桁チェックをどうしたら良いか悩んでいます。 また、99を入力した場合は99.0、09.1と入力した場合には9.1と、 整数部は一番左側に0があれば消し、小数部は未入力ならば".0"を 追加できたらと思っているのですが、うまくいきません。 実現するために必要な処理は、 ・入力値が数値か ・数値であれば、整数か、小数か ・整数部の桁チェック ・小数部の桁チェック(小数時) ・整数であれば、999.9の形になるよう変換 といったところかなと思うんですが、まず小数チェックで 躓いています。 参考にロジックを交えて教えていただけないでしょうか。 宜しくお願いします。

  • 15524→「15520」となるようにするには? 整数下1桁切捨て方法

    整数の下1桁を切り捨てて表示するには関数を使うのでしょうか? 小数点の場合だと関数を使用して対応できたのですが、整数の場合では どのようにすればいいですか?教えてください。

  • 整数でないとき

    10 INPUT X 20 IF X=0 THEN END 30 C=X-2*INT(X/2) 40 IF C=0 THEN PRINT”偶数” ELSE PRINT”奇数” 50 GOTO 10 というプログラムはXが整数でなければ奇数と判定してしまいます。20行と30行の間に命令を追加して、Xが整数でないときは”整数でない”と表示して、次の入力を待つように修正し、整数のときだけ奇数か偶数かを判定するようにするには、 25 IF X^2>INT(X^2) THEN PRINT”整数でない”:GOTO 10 を追加する。 でよいのでしょうか? ぜひ教えてください。 

  • 配列の添え字が小数だとどうなる?

    ある書籍の検索アルゴリズムの2分検索の説明で、下記のような例が示されていました。 (これはその例を私がプログラム化したのもので、書籍からの転写ではありません。) そこで疑問なんですが、このプログラムは確かに動作こそしますが、 ループの中の$middleは小数になりますよね。 添え字が小数になる事は、正しい配列の処理といえるのでしょうか? 小数に対して、丸めるなどの処理を加えるべきなのでしょうか? よろしくお願いします。 ------------------------------------------------------------ 「$arrayの中から、$xを検索します」 $array = array(1,2,3,4,5,7,10,12); $x = 10; $low = 1; $high = count($array); $is_exist = false; while( $low <= $high and $is_exist == false ) { $middle = ( $low+$high )/2; if( $array[$middle] == $x ) { $is_exist = true; } else if ( $array[$middle] < $x ) { $low = $middle+1; } else if ( $array[$middle] > $x ) { $high = $middle-1; } } if ($is_exist) { echo "true"; } else { echo "false"; }

    • ベストアンサー
    • PHP

専門家に質問してみよう