ReviewBoard 釣られて使ってみた | Top | 本命はDjangoKit

 

JavaとかPythonのround

Pythonのround関数の議論を読んでみたってあるけど


そもそもPythonで0.0225をプリントしてみなってんだw


(RSSしか見てない人のための追記) 恥ずかしい思いをしたおかげで勉強になった。0.49999999999999999のroundについて、PythonもJavaも正しい動きをしているらしい。


>>> 0.0225
0.022499999999999999

0.49xxxも

>>> round(0.49999999999999999)
1.0
>>> round(0.4999999999999999)
0.0


ちなみに、Javaの場合

import java.math.BigDecimal;

public class Test{
    public static void main(String[] args){
        System.out.println("17:" + Math.round(0.49999999999999999d));
        System.out.println("16:" + Math.round(0.4999999999999999d));
        double d = 0.49999999999999999999999999999999d;
        System.out.println("double:" + d);
        BigDecimal bd = new BigDecimal(0.49999999999999999999999999999999d);
        System.out.println("bd double ROUND_HALF_UP:" + bd.setScale(0, BigDecimal.ROUND_HALF_UP));
        bd = new BigDecimal("0.49999999999999999999999999999999");
        System.out.println("bd String ROUND_HALF_UP:" + bd.setScale(0, BigDecimal.ROUND_HALF_UP));
    }
}

17:1
16:0
double:0.5
bd double ROUND_HALF_UP:1
bd String ROUND_HALF_UP:0

Python識者が現れる予感:-)

Taged with:,,,

urihttp://www.everes.net/2007/jun/06/java-python-round/

Entry Date:2007-06-06 13:27

Author:makoto

ping url:http://www.everes.net/2007/jun/06/java-python-round/tbping/

subscribe:feed with LDR

Comments

1 by hnw

14:06 on

2007-06-06

どうも。僕の記事で伝わらなかったとしたら非常に残念ですけど、10進表記で小数点以下第4位を見ていませんか?1000倍して小数点以下第1位を見ないと意味がないですよ?ソースコードも貼ってみたんですけど。

理解しているつもりでもつい10進の常識で考えてしまうのが難しいところですよね。

今まで僕の記事を読んでくださった方には既に伝わっているかと思っていたんですが、なかなか人に物事を伝えるのは難しいものです。このあたりは記事に追記させて頂きます。レスポンスに感謝します。

また、0.49999999999999999はIEEE64bit浮動小数点数だとピッタリ0.5だと思いますよ?

2 by makoto

14:41 on

2007-06-06

ごめんなさい。
思いっきり10進数の世界で読んでます。
Pythonが0.0225を保持できないことと、0.49999999999999999を四捨五入すると1になってしまうということを(コンピュータの世界からではなく)、人間の世界から見ています。
が、人間の世界でも0.49999999999999999は四捨五入すると1だよと言われると「ぐぅ」と言います。0.5より小さな数字は四捨五入すると0だという認識しか無いので(ゆとり!?)。

http://www.tokumaru.org/d/?date=20070531

Add Comment

コメント追加








What's Next
Tags
Blog Archive
Project
  • » pymagnolia

    ma.gnolia.comのAPIを操作するPythonライブラリ。

  • » django-ja

    Djangoと日本の仲間たち。
    Djangoに関するニュースや、「仲間たち」のブログエントリをアグリゲートしています。

  • » rhaco

    PHPのWebフレームワーク。 PHPらしさを失わず直感的に記述できることを目指している。 Djangoと同じく、他のライブラリに依存しない。また、Djangoっぽいテンプレートの作り方も可能。

  • » Tracka

    スモールチーム、家族用の知共有ウェブアプリケーション。
    テキスト、画像、youtube動画、stage6動画等をトラック!

  • » BMO

    BMOは、本、CD、DVD、ゲームに印刷されているバーコードをiSightで読み取り、AmazonのAPIを利用して画像や情報をmacに保存します。iSightのついているmacで利用してください。Leopardと呼ばれているOSX 10.5以上が必要です。 保存した情報は、OSX Leopard(10.5)から搭載されたCover FlowとQuick Lookという仕組みを利用して表示します。