質問

Wikipedia によると、負の数を丸める場合、絶対数を丸めます。したがって、その推論により、-3.5は-4に丸められます。しかし、java.lang.Math.round(-3.5)を使用すると-3が返されます。誰かこれを説明してもらえますか?

役に立ちましたか?

解決

javadoc

  

最も近いlongを返します   引数。結果は四捨五入されます   整数を1/2加算して、   結果の床、およびキャスト   long型の結果。言い換えると、   結果は次の値に等しい   式:

     

(long)Math.floor(a + 0.5d)

概念的には、切り上げ。つまり、次の整数の値よりも大きい、-3は-3.5より大きく、-4は小さいです。

他のヒント

丸めにはさまざまな方法があります。あなたが見ているものは、(それが述べているように)対称算術丸めと呼ばれています。状態に言及しているセクション:"この方法は、会計などの数学アプリケーションで一般的に使用されます。一般的に初等数学の授業で教えられるものです。」これは、それが世界的に合意されたルールではなく、最も一般的なルールであることを認めているようです。

個人的に、私は学校でそのルールを教えられたことを覚えていません。丸めの私の理解は、数字の符号に関係なく、0.5は切り上げられるということです。どうやらJavaの作者も同じ理解を持っているようです。これは非対称算術丸めです。

異なるツールと言語は、異なる丸めスキームを使用する可能性があります。 Excelは明らかに対称法を使用しています。

(全体的に、ウィキペディアと経験の間に矛盾がある場合、他の場所で情報を探すことをお勧めします。ウィキペディアは完全ではありません。)

価値があるものについては、 java.math.BigDecimal には、そのようなことをさらに制御する必要がある場合に選択可能な丸めモードがあります。

あなたが引用したウィキペディアの記事は、それが丸める唯一の方法ではなく、単に丸める一般的な方法だとは言っていません。また、その記事にはいくつかの選択肢が記載されています(残念ながら、JavaScriptの動作を示すときに「非対称算術丸め」と呼ばれていますが、いずれもJavaの丸め方法を説明していません)。

数字の丸め方を決定する必要がある 、その方法を使用します。 Javaの実装がそれと一致すれば、素晴らしいことです。それ以外の場合は、独自に実装する必要があります。

Javadocsによると:

引数に最も近い long を返します。結果は、1/2を加算して整数に丸められ、結果の下限を取得し、結果を long 型にキャストします。つまり、結果は式の値と等しくなります。      

(long)Math.floor(a + 0.5d)

慣習は切り上げることです。ウィキペディアは間違いやすいと思います。ただし、Microsoftが-4に丸めたため、間違っていることがわかりました。これは慣例ではありません(数学の博士号を持つ人に確認しました)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top