2009年04月20日

3 / 2 = 1.5

私のPerlに対する知識が節穴だということを再認識しました。
「3 / 2」の結果を「1」になると思っていた。答えは「1.5」でした。

で、気になったので「3 / 2」が「1」になる子と「1.5」になる子を調べてみた。

================================
 1.5の子たち
================================
■JavaScript => 1.5
<script type="text/javascript">
alert(3/2);
</script>

■Perl => 1.5
print 3 / 2;

■VBScript => 1.5
WScript.Echo 3 / 2

■VisualBasic => 1.5
MsgBox(3 / 2)

■ActionScript => 1.5
<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml">
  <mx:Script>
    <![CDATA[
      import mx.controls.Alert;
    ]]>
  </mx:Script>
  <mx:Button id="id1" label="button" click="Alert.show(String(3 / 2))"/>
</mx:Application>

================================
 1の子たち
================================
■Ruby => 1
p 3 / 2

■Python => 1
print 3 / 2
※20090502追記:python3系は1.5

■Java => 1
public class SanWaruNi {
  public static void main(String[] args) {
    System.out.println(3 / 2);
  }
}

■C# => 1
MessageBox.Show((3 / 2).ToString());

■C => 1
#include <stdio.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
  printf("%d", 3 / 2);
  return 0;
}

■C++ => 1
#include <iostream>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
  std::cout << 3 / 2;
  return 0;
}

■コマンドプロンプト => 1
SET /A 3 / 2

■bash => 1
num=`expr 3 / 2`


うちのパソコンに入っている言語はここまで。
Perlはデフォルト浮動小数。他の「1」にしてる子達はどうなんだろう。ActionScriptは確か浮動小数点数のNumber型が使われていた気がする。VBはしっかり勉強したことがないので分からない……
posted by MW at 23:49| Comment(3) | TrackBack(0) | 所感 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
Python、その書き方だと3系に見えるんですが、print文に優先順位を明示する括弧を付けてるだけですか?
3系なら1.5になるはずなので・・・
Posted by とおりすがり at 2009年05月01日 08:01
printの扱いが変わったのは記憶してたのですが、数値の扱い変わったの知りませんでした。追記入れときました。情報どもです。
Posted by MW at 2009年05月02日 02:59
ちなみに、Python3系で1が欲しかったら、//演算子を使います。
print(3 // 2) # => 1

ここにない言語/環境では、

Java系--------------
Scala
3 / 2 // => 1

Groovy
3 / 2 // => 1.5

シェル系------------
PowerShell
PS1 > 3 / 2 # => 1.5

zsh
% echo $[3 / 2]
1

関数型言語系--------
Scheme
(/ 3 2) ; => 1.5

Haskell
3 / 2 -- => 1.5

Erlang
3 / 2. % => 1.5

OCaml
3 / 2;; (* => 1 *)

F#
System.Console.WriteLine(3 / 2);; // => 1

その他--------------
Prolog
| ?- X is 3 / 2. % => 1.5

SQL(SQL Server 2008)
SELECT 3 / 2; -- => 1

R
3 / 2 # => 1.5

のようになります。
Posted by とおりすがり at 2009年05月02日 20:14
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:


この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。