• ベストアンサー

intの挙動?

Perlのintをつかって整数化をしているのですが、すこし挙動がおかしいというか 正確な数値が出ませんので質問させていただきました。 $aaa = 21000*0.7; $aaa = int($aaa); print $aaa; 結果:14699 となります。 21000×0.7は14700のはずかと思いますが、なぜか14699になってしまいます。 どう考えてもわからなくなってきました。 どなたかご教授いただけませんでしょうか?

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

>21000×0.7は14700のはずかと思いますが、なぜか14699になってしまいます。 浮動小数点の誤差…でしょう。 http://d.hatena.ne.jp/perlcodesample/20080828/1219924206 とか見てみるとよいかと。 21000×7÷10で計算してみてはどうですかね?

titikun00
質問者

お礼

早速のご連絡ありがとうございます。 21000×7÷10ですとうまくいきました。 小数点の誤差というものがあるということをはじめて知りました。 今後は一旦小数を整数に直してから最後に割るようにしてみます。 ありがとうございました。

関連するQ&A

  • perl intの動作について

    Perlのintについてですが、以下の3の計算結果が異なる理由を教えてください。 1:print 1080/1.08;  →「1000」と表示される 2:print int 1080/1.08;  →「1000」と表示される 3:print int(1080/1.08);  →「999」と表示される Perlのバージョン:ActivePerl v5.14.2 OS:Windows XP

    • ベストアンサー
    • Perl
  • MQLの勉強しているのですがエラーが出ます②

    int aaa = ; void OnTick() { if((aaa < 10 ||aa.20) && aaa<30) { Print("aaa=0~9 or aaa=21~29 aaa=".aaa); } else if(aaa >=10 && <- 20) { Print("aaa=10~20 aaa=",aaa); } else { Print("aaa=30 aaa=".aaa); } aaa++; } たったこれだけのコードですが今度はエラーが10コでてきます。 でも今度は理由がなんとなく判ります。 0~9のプログラム上の表示の仕方が間違っているのだと 思います。  しかしどこを押せばいいか判らないのです??

  • awk の int()に関数について

    数値処理でawkを使い始めているのですが, int関数を使って小数を切り捨てたいのですが, 以下のような現象が起こって困っています。 print int(9.53*100) 952 ? print int(9.53*1000) 9530 OK print int(65.52*1000) 65519 ? print int(65.52*1000.0+0.1) 65520 ? int関数はどういう動作をするのかどなたかご教示いただけますでしょうか。 お願いいたします。

  • chrをintに変換すると…

    char [] aaa = {'a', 'b', 'c', 'd', 'e'}; と宣言したとします。 System.out.println((int)aaa[i]); と出力すると97~101の数字になります。 それはなぜなのでしょうか。

    • ベストアンサー
    • Java
  • MQLの勉強しているのですがエラーが出ます?

    int aaa=o; void OnTick() { if( aaa>10) { aaa = o; } Print("aaa=",aaa); aaa=aaa+1; } たったこれだけの短い練習コードなのですがエラーが出ます? ;や{}もチェックしたのですが何がおかしいでしょうか? 参考文献 https://jidoubaibai.com/kouza/nyumon/part3/

  • INT関数で

    初歩的な質問で申し訳ないのですが、 A1セル:1.5 A2セル:2.3 A3セル:3.6 とあったと仮定しまして、 A4セルに合計を出すのですが、普通にSUMで合計すると7.4となります。 今回の条件として整数にしなくてはなりません。 合計した値をINTで整数だけ抜くと7という解になりますが、 INTで抜き出した後合計すると6という解になります。 「INTで抜き出した整数の合計を求める」関数をA4セルにいれて処理したのですが、どうしたらいいのでしょうか。 宜しくお願い致します。

  • 多次元配列?配列のキー?変数の型?

    PHP勉強中のものです。 予定通りの動作にならんく四苦八苦しています。 どのように修正すれば予定通りになるのか考え方のアドバイスなどお願いします。 処理したいこと 変数$xxxの先頭の文字と最後の文字をsubstr()で取り出し$aaaと$bbbに別けそれぞれ代入しキーとして多次元配列に代入した配列要素を指定してechoで出力したい 試してみたこと $aaa1と$bbb1に直接整数を代入してみたところ、echoで出力された キーになる変数を整数型として変数に代入してみたが希望通りの動作にならなかった。 なにかアドバイス頂けると助かります。 $array = array( "0" =>array("あいうえお","かきくけこ"), "1" =>array("さしすせそ") ); $xxx = "0-1"; $aaa = substr($xxx,0,1); $bbb = substr($xxx,2); $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない $aaa1 = 0; $bbb1 = 1; echo $array[$aaa1][$bbb1]; //出力された $aaa = (int)$aaa; $bbb = (int)$bbb; echo $array[$aaa][$bbb]; //出力されない

    • ベストアンサー
    • PHP
  • ファイルオープンの挙動

    windows環境にてperlの勉強をしております。 http://www.rfs.co.jp/sitebuilder/perl/05/03.html#open を参考にopenを使っておりました。 ファイル書き込みがうまくできていないようなので 以下のようなテストプログラムを作成したのですが 上記のサイトのような挙動をしませんでした。 --source--- #!/usr/local/bin/perl print "Content-type: text/html\n\n"; open(FILE, "+> sample.txt"); $data = <FILE>; print "data = $data<br>"; $flag = print FILE "TEST MESSAGE"; print "flag=$flag<br>"; close(FILE); --source-- --sample.txt-- 実験です --sample.txt-- windows環境だと data = flag= と表示され linux環境(レンタルサーバ)だと data = flag=1 と表示されます。 私の予想では data = 実験です flag = 1 と表示されると思ったのですが何が原因でしょうか。 またlinuxとwindowsで結果が違うのは何か原因があり、 また修正可能でしょうか。 openに+>の挙動例が書いていないサイトもあることが 若干気になります。 もし+>自体が不安定なのでしたら安定して使えるもの をおしえてください。所望の挙動は読み取り+上書き書き込みです。 環境 windows2000 "an http daemon" linux (infoseekフリースペース) apache

    • ベストアンサー
    • Perl
  • string型からint型への型変換

    C++で、string型からint型は、 string str; //ほかのstring型の変数から整数部分のみを切り出して来たものが入る int i; //ここにstrの中身(整数)をあらたに入れたい が定義されている下で、 char s[10]="0"; などを通して、 int length=str.length(); str.copy(s,length,0); i=atoi(s); とやる他ないのでしょうか? 初心者のつまらない質問ですが、ご教授いただけると幸です。 よろしくお願いします。

  • Access97 Int関数

    小数点の切り捨てをしたくてクエリーで 以下の計算をしてみました。 =Int([個数]*[単価]) ところが以下の数値で計算させると結果が 50232となると思うのですが50231となってしまいます。 数量:460 単価:109.2 結果:50231(電卓で計算すると50232) 結果が小数点になるときは問題ないようです。 使い方が間違っているのでしょうか。 こういう場合Int関数を使うのが誤りなのでしょうか? だとしたら他に当てはまる関数があるのでしょうか? ちなみにテーブルの定義としては 数量:長整数型(小数点以下桁数0) 単価:単精度浮動小数点型(小数点以下桁数0) となっていますが小数点は表示されています。

専門家に質問してみよう