• ベストアンサー

PHPで余りを求めるには

いつも大変お世話になっております。 PHPで余りを求めたいのですが、うまく計算できません。 下記の数字を『%』で余りを求めてみました。 12069097343 と 79811665258 を数字で計算します。 手計算だと、 12069097343は余りが2、 79811665258が余りが3 のはずなのですが、プログラムで計算すると全く狂います。 print 12069097343%7; print 79811665258%7; と表示させると、両方とも『-3』を表示します。 なぜマイナス表記で、数字も違っているのかわかりません。 上記数字を変数に格納してから計算してみました。 $number1 = "12069097343"; $number2 = "79811665258"; print $number1%7; print $number2%7; すると、今度は両方とも『1』を表示しました。 何が問題なのかさっぱりわかりません。 何卒、ご教授の程、宜しくお願いいたします。

  • nikuq
  • お礼率75% (477/631)
  • PHP
  • 回答数2
  • ありがとう数5

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

  • ベストアンサー
  • MASA_H
  • ベストアンサー率42% (64/151)
回答No.1

単純にintegerの範囲を超えています。integerの範囲は-2147483645~2147483645です。

nikuq
質問者

お礼

ありがとうございます! なるほどー。そんな規制があったんですね。 早速ネットで調べて、integerの範囲を超える場合は、 bcmod関数を使用するとの事で、早速試してみたらばっちりうまくいきました! 本当に助かります。ありがとうございました!

その他の回答 (1)

回答No.2

%が処理できる範囲 -2147483648~2147483647 を超えているからです。 これを超えるとこの範囲内に丸められてしまいます。 print 2147483647 % 7; 結果 1 print 2147483648 % 7; 結果 -2

nikuq
質問者

お礼

ありがとうございます。 全く持って勉強不足でした。 ご指摘頂き誠にありがとうございます。 大変勉強になりました!

関連するQ&A

  • PHPの変数をJavaScriptに渡したい

    PHPの中にJavaScritの確認ダイアログを表示しています。 PHPの変数をJavaScript内でも使いたいのですが、どのようにすればよいのでしょうか? <?php $number=$_POST["number"]; if(isset($_POST["delete"])) { //選択したデータの削除 //削除の確認 print("<script language='JavaScript'>"); print("res=confirm('削除してもよいですか');"); print("if(res==false) location.href='delete.php?number=$number';"); print("</script>"); ?> また、<?php  ?>内でJavaScriptを使っているのでprint文でJavaScript文を書いていますが、あまりスマートではありません。 これ以外の記述方法はあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP、初心者なのですが

    練習で、簡単なプログラムをいろいろ作成していて、現在下のようなプログラムを作成しています。 <?php session_start(); $_SESSION['num1']=$_POST['num1'];        //POSTで送られたnum1をセッション変数に格納$_SESSION['num2']=$_POST['num2'];  //POSTで送られたnum2をセッション変数に格納 //////////// 数字もその位置も一致している数 ////////////// $num1S; ////////////num1の各桁の数字////////////// $X1=$num1 % 10; //num1の一の位の数字$number1=$num1 - $X1; $X2=($number1 % 100)/10; //num1の十の位の数字 $number1=$number1 - $X2 * 10; $X3=($number1 % 1000)/100; //num1の百の位の数字 $number1=$number1 - $X3 * 100; $X4=$number1 / 1000; //num1の千の位の数字 ////////////num2の各桁の数字////////////// $X2_1=$num2 % 10; //num2の一の位の数字 $number2=$num2 - $X2_1; $X2_2=($number2 % 100)/10; //num2の十の位の数字 $number2=$number2 - $X2_2 * 10; $X2_3=($number2 % 1000)/100; //num2の百の位の数字 $number2=$number2 - $X2_3 * 100; $X2_4=$number2 / 1000; //num2の千の位の数字 if($_SESSION['num1']==$_SESSION['num2']){                         //num1とnum2の各桁の数字が全て一致してればnum1S=4 $num1S=4; }else if((($X1==$X2_1)&&($X2==$X2_2)&&($X3==$X2_3))||(($X1==$X2_1)&&($X2==$X2_2)&&($X4==$X2_4))||(($X2==$X2_2)&&($X3==$X2_3)&&($X4==$X2_4))){ //num1とnum2の各桁の数字3つだけ一致してればnum1S=3 $num1S=3; } ?> <html> <head> <title>練習</title> </head> <body> <form method="POST" action="./practice.php/"> <input type="text" name="num1" maxlength="4"> <input type="text" name="num2" maxlength="4"><br> <input type="submit" value="チェック" name="check"><br> <input type="submit" value="クリア" name="clear"><br> <?php if(isset($_POST['check'])){ //チェックボタンが押されると if($num1S==4){ echo "4個"; }else if($num1S==3){ echo "3個"; } } if(isset($_POST['clear'])){ //クリアボタンが押されると $_SESSION=array(); session_destroy(); } ?> </form> </body> </html> (出力例1) 1234(num1)1234(num2) [チェックボタン] [クリアボタン] 4個 (出力例2) 1234(num1)1239(num2) [チェックボタン] [クリアボタン] 3個 私は、もしnum1とnum2の入力値(4桁)の各桁の数字が等しくその数字の位置がすべて同じなら「4個」という表示を、3つだけ等しくその数字の位置が同じなら「3個」という表示をするようにしたいのですが、後者の表示がちゃんと出来ません。(出力例2)という結果にもなるのですが、1234(num1)5678(num2)というように、全く違う数字でも「3個」という表示が出てきてしまいます。 ちゃんと表示させるにはどうすれば良いでしょうか? 長文で分かりにくくなってしまいましたが、ご助力お願いします。

    • ベストアンサー
    • PHP
  • PHPで特定の変数値を取り出す

    PHPの関数で変数に $str="1-a"; と格納されているものがあります。 ”-”ハイフンまでの文字「1」を取り出したい。 ”-”ハイフン以降の文字「a」を取り出したい。 とやりたいのですが いい関数はございませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPの変数展開

    いつもお世話になっております。 最近PHPを勉強し始めたのですが、どうしてもわからないことがあります。 PHPの変数に文字列を格納し、それを画面に表示したいです。 ネットを参考にしても、またネットの例文をそのまま実行しても、 PHPの変数に格納された文字列が表示されません。 どうしてなのか、さっぱりわかりません。 どうか教えてください。 <?php $colorname = "red"; echo "frame is $colornamecolor"; ?> このように記述して実行すると、画面には 「frame is 」と表示されます。

    • ベストアンサー
    • PHP
  • php内のformのvalueに変数の値をいれたい

    どうぞよろしくお願いします。 php内のformのvalueに変数の値をいれたいのですが、下記の様に書くと<?=$a?> がそのままソースに出てしまいます。 どの様に書けば変数の値をvalueに格納できるでしょうか? <?php $a='abcd'; print'<form method="post" action="abc.php">'; print'<input type="hidden" name="a" value="<?=$a?>">'; print'</form>'; ?>

  • 2進表示の大きな整数の余りを求めるには

    こんにちは。 表題のように、VC++で大きな整数の余りを求める方法ですが、与えられるのは2進表示だとします。例えば  1101000101101・・・・・・0010 (256 bit) を  1101001101110010 (16bit) で割った余りを求めたいのです。考えられる方法としてはどんなものがあるでしょうか? ちなみにまともにやろうとすると、2^256クラスの変数が必要となり(10^77のオーダー、long long intでも入りきらず)、C言語ではできないような気がします。 ある人に、ビットハンドリングで2進数のまま計算すればできると言われたのですが、そういう方法はあるんですか?あるなら教えてほしいんです。 よろしくお願いいたします。

  • PHPで別PHPを呼び出す。

    PHPプログラムないで別PHPを呼び出し戻り値を受け取ろうと考えています。 test1.php------------- <?php print "<html><body>\n"; $return_data= exec(/usr/local/bin/php ./test2.php?param1=1¶m2=2); print $param1."+".$param2."=".$return_data; print "</body></html>"; test2.php------------------ <?php $return_item = $param1 + $param2; print $return_item; ?> のように、test1.phpからパラメータを渡し、 test2.phpで計算をして答えをtest1.phpに返す プログラムを作成しました。 test1.phpからtest2.phpをパラメータをつけて渡すのが うまくいきません。 execではパラメータをつけることはできないのでしょうか?もしくは他の方法はないでしょうか? functionやincludeではなく上記の方法で行いたいと思っております。 お手数ですが、アドバイスお願い致します。

    • ベストアンサー
    • PHP
  • モジュラス11の余り「0」の扱いについて

    特別徴収税額通知データの作成で 市町村コード6桁化に使う モジュラス11について質問ですが 余り「0」の場合、検査数字は「0」のハズなのに 全国地方公共団体コードのサイトでは 余り「0」の場合、検査数字は「1」になってます。 計算式を見ると、「モジュラス11ウエイト2~7」 のようですが、何か釈然としません。 そこで確かめたいのが (1) モジュラス11の余り「0」の場合、   検査数字は「0」なのか「1」なのか? (2) 両方まかり通っているならば   ひょっとしてローカルルール適用可能なのか? 詳しい方、解説をお願いします。 特別徴収税額通知データ(総務省通達形式CSV) http://www.eltax.jp/file.jsp?id=3363 ●モジュラス11の余り「0」→検査数字「1」派 全国地方公共団体コードにおける「検査数字」について(情報提供:総務省) https://www.lasdec.or.jp/cms/1,7505,14.html#cd ●モジュラス11の余り「0」→検査数字「0」派 JIS X 0306:1999 国際標準逐次刊行物番号 (ISSN) http://kikakurui.com/x0/X0306-1999-01.html NW-7(CODABAR) http://www.aimjal.co.jp/bclink/nw-7.htm 『モジュラス11(ウエイト・・・)計算式』(MYU) エクセル Excel [エクセルの学校] http://www.excel.studio-kazu.jp/kw/20100426101944.html

  • PHP の PRINT 文の変数部分の表示がおかしい。 <?php print 大連 ; ?>などと表示.

    PHPで初めてメールのプログラムを作っていますが、$txtLastName の変数にある文字をform から「大連 」を入力後、にそうすると、確認のため PRINT してみたら、以下のようになってしまいました。 しまいます。 「大連」 は変数の内容で表示したい文字ですが、「<?php print」と「; ?>」は表示してもらいたくありません。カナはデータ入力なしの場合です。 どうやったら、解決できるでしょうか? ------- PHP のソース部分 $emailtxt = "姓名:\t"; $emailtxt .= $txtLastName; $emailtxt .= "\nカナ:\t"; $emailtxt .= $txtFirstName; ・・・・・・・ print $emailtxt; --ソース部分はここまで-----  《ホームから姓名として大連を入力したとすると》 -----表示結果----- 姓名: <?php print 大連 ; ?> カナ: <?php print; ?> 性別 男性M 女性F: 出生年月日: 年 月 日国籍: 出生国名:・・・・・・

  • エクセルで余りの表示

    こんにちは。 IBMのAPTIVAで、WIN98使っています。 エクセルはよくわからないのでよろしくお願いいします。 表を作りたいのですが、こういうのは可能でしょうか?  縦(↓)の一番左の列の数字を一番上の列の数字で割った余りを表示する.  ただし、割られる数字が割る数字よりも小さい時には割られる数字そのままを、  丁度割り切れる数字の場合には割る数字を表示したいのです。 これは、噂にきく”関数”とかいうものを使うのでしょうか? また、その関数はどこに記入するのでしょうか? 今はWIN98ですが、買い換えたら、 またこの手の表計算のデータ類は1から記入しなおさなくてはいけないのでしょうか? またWIN機を買うつもりなんですが、 何か注意点やアドバイスがあればそちらもよろしくご教示ください。

専門家に質問してみよう