2012年8月24日金曜日

数字を扱う関数

こんばんは。今日は、八十吉さんと実験していて面白い関数を見つけたので紹介します。

教科書p97のプログラム3【form-calc.php】という例題の中に"intval関数"というのがでてきます。これは、「変数の整数としての値を取得する」という関数です。「整数としての値を取得する」というのに聞き覚えがあるなぁ、と思ってぺらぺらと教科書をめくり返していたら、"floor関数"というやつがp80にありました。floor関数とは、「(小数点以下の)値を切り捨てる」という関数でした。

両方「整数」としての値を取得する、ということが分かりましたが、ここで疑問。

「floor関数と、intval関数、何がちゃいますのん??」

floor関数は、「小数点以下を切捨て」というておるので、amiと八十吉は考えました。そして、「はっはーん、intval関数は四捨五入とかしてくれるんじゃね??」という仮定を立ててみました。そして、form-calc.phpを使って実験してみたのですが、結果は、intval関数も小数点以下を切り捨てて計算されてしまう、ということでした。つまり、1.1と入力しても、1.9と入力しても、小数点以下は切捨てなので、「1」として値が取得され、計算されてしまうのです。普通に計算すると1.1+1.1=2.2なのに対して、1.9+1.9=3.8ですが、intval関数を使うとどちらも「2」という結果になります。

それって、さば読みすぎじゃね?!ほんまは29歳なのに、「ワタシ、20歳よ」と言うていることになります。四捨五入とかしてくれる関数もあるはずやーー!!!と調べたところ、ありました。ありました!!

round関数というらしいです。これは、四捨五入してくれます。また、intval関数とは反対に、切り上げしてくれる関数もありました。これは、ceil関数というらしいです!!!!


//フォームの結果を集計【intval関数の場合】
$a = intval(1.1); ※1として値を取得
$b = intval(1.1); ※1として値を取得
$answer = $a + $b; ※2という結果


//フォームの結果を集計【round関数の場合】
$a = round(1.1); ※1として値を取得
$b = round(1.1); ※1として値を取得
$answer = $a + $b; ※2という結果


//フォームの結果を集計【ceil関数の場合】

$a = intval(1.1); ※2として値を取得
$b = intval(1.1); ※2として値を取得
$answer = $a + $b; ※4という結果


↑結果、全然変わってくるやんけ~~~!!!というわけで、驚きました。これは、計算をする前の値を取得するときに関数を指定しました。



//フォームの結果を集計【intval関数の場合】

$a = 1.1; ※1.1として値を取得
$b = 1.1; ※1.1として値を取得
$answer = intval($a + $b); ※2.2なので、小数点以下は四捨五入、つまり、2という結果




//フォームの結果を集計【round関数の場合】

$a = 1.1; ※1.1として値を取得
$b = 1.1; ※1.1として値を取得
$answer = round($a + $b); ※2.2なので、小数点以下は切り捨て、つまり、2という結果



//フォームの結果を集計【ceil関数の場合】

$a = 1.1; ※1.1として値を取得
$b = 1.1; ※1.1として値を取得
$answer = ceil($a + $b); ※2.2なので、小数点以下は切り上げ、つまり、3という結果

↑計算した答えを取得するときに関数を使うと、これまた値が変わってくるのですね。

【まとめ】

関数名はたらき
intval切り捨て
floor切り捨て
ceil切り上げ
round四捨五入

※なお、floor関数は「値を切り捨て」で、intval関数は「変数の整数としての値を取得する」という違いがあるようです。

つたない説明で伝わるかどうか謎ですが、これらを発見した我々、大興奮でした……!!!!興味のある方、ぜひともお試しあれ……!!!

4 件のコメント:

  1. さすがやね~スゴイわ‼
    教えてもらって、さらにブログでみてまたまた納得
    先生交代して欲しいくらい。さぞおもろい!授業になるでしょうね~

    返信削除
    返信
    1. >>daiyasakuraさん
      八十吉さんとああでもないこうでもないと言いながらさんざん実験をして、後でsakuraさんが目を輝かせて聴いてくれるので、めっちゃ楽しんでます。
      さらにウケるように……、日々精進。←なんかモチベーションの方向間違っている。笑
      でも、うれしいお言葉、ありがとうございます♪^^

      削除
  2. 遠くで楽しそうだから、いつもうらやましいけど、
    研究成果をいつもシェアしてもらってありがとうございます~♪

    返信削除
    返信
    1. >>imrさん
      研究に没頭しすぎて、教科書が進んでいたことに気がつかないことも、しば・しばですが、このくだらない研究は面白いです!!!
      たぶん、八十吉さんも私も「どうやって次はわらかしたろかなぁ」と思いながらやっているので、これが今後役に立つのかは、全くの未知数です。へへ。
      でも、妙な達成感は日々蓄積されております!!えっへん。笑

      削除