案の定、社内の誰も更新しやがりませんねぇ。。。
この手のものは、強制力がないとやらないものなんですね、やっぱり。
さて、気を取り直して、今日の記事は「-1を3で割ったら余りはいくつ?」です。
ぐだぐだ言うより結果をみましょうか。
Mod.java
public class Mod {
public static void main(String args[]) {
int retValue = -1 % 3;
System.out.println(retValue);
}
}
クリックで拡大します。
結果は
PHP,JAVA :-1
python, perl, ruby:2
この「 % 」は剰余 ( modulo:モジュロ ) 演算子といいます。
負の数のときは挙動がプログラムによって違うのですね。
理屈はいろいろあるんでしょうが、子供の頃に「 3 x 0 + (-1) = -1 」と習ったので、結果が -1 と出てくれたほうがわかりやすいです。
float % 1 の挙動も言語によって違うみたいです。
返信削除Pythonの場合はfloatの小数部分が返ってきて、
PHPだと必ず0が返ってきます。
PHPは勝手にint値に丸めちゃうみたいです。
「1234.5 % 1」は、
PHP, Perl => 0
Python, Ruby, Java => 0.5
●PHP
$ php -a
Interactive shell
php > $float = 1234.5;
php > echo $float % 1;
0
php > echo $float - (int)$float;
0.5
php >
●Python
$ python
Python 2.5.5 (r255:77872, Mar 31 2010, 21:03:05)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1234.5 % 1
0.5
float の剰余演算の場合、 PHP には fmod() っていう関数がありますが、他はどうなんでしょうか…? 数学的には1つしかないと思うのに、言語によってバラバラっていうのが不思議です。
返信削除ところで、irb とか php -a みたいに対話的に perl でやる方法ってないんですかねー。
> ところで、irb とか php -a みたいに対話的に perl でやる方法ってないんですかねー。
返信削除ってことで自己解決編。
-------------------------------
[web@job ~]$ perl -d -e 1
Loading DB routines from perl5db.pl version 1.27
Editor support available.
Enter h or `h h' for help, or `man perldebug' for more help.
main::(-e:1): 1
DB<1> $v = -1 % 3
DB<2> print $v
2
DB<3> q
[web@job ~]$
-------------------------------
DB<1> のところで my を入れてローカル変数宣言したらダメです。