タグ付けされた質問 「bigdecimal」

BigDecimalは、任意の精度で10進数を表すJavaの数値オブジェクトタイプです。


3
BigDecimal-newまたはvalueOfを使用する
BigDecimalオブジェクトをdouble dから取得する方法は2つありました。 1. new BigDecimal(d) 2. BigDecimal.valueOf(d) どちらがより良いアプローチでしょうか?valueOfは新しいオブジェクトを作成しますか? 一般に(BigDecimalだけでなく)、何が推奨されますか-newまたはvalueOf? ありがとう。
97 java  bigdecimal 

14
Javaでの金額の表現[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して質問を更新し、事実と引用で回答できるようにします。 7年前休業。 この質問を改善する BigDecimalがJavaで金額を表すためのベストプラクティスとして推奨されていることを理解しています。あなたは何を使うのですか?代わりに使用したいより良いライブラリはありますか?


5
最高の(ポータブルな)クロスプラットフォームの任意精度の数学ライブラリは何ですか?[閉まっている]
閉まっている。この質問は、StackOverflowのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、StackOverflowのトピックになります。 5年前に閉鎖されました。 この質問を改善する CまたはC ++で適切な任意精度の数学ライブラリを探しています。アドバイスや提案をお願いします。 主な要件: これは、必要があります任意の大きな整数を、私の扱う主要な関心は整数です。任意に大きいという言葉が何を意味するのかわからない場合は、100000のようなものを想像してください!(100000の階乗)。 ライブラリの初期化またはオブジェクトの作成中に精度を指定する必要はありません。精度は、システムの利用可能なリソースによってのみ制約される必要があります。 それはすべきプラットフォームのフルパワーを利用し、ネイティブで「小さな」の数字を処理する必要があります。つまり、64ビットプラットフォームでは、(2 ^ 33 + 2 ^ 32)の計算には使用可能な64ビットCPU命令を使用する必要があります。ライブラリは、同じプラットフォームで(2 ^ 66 + 2 ^ 65)を使用する場合と同じ方法でこれを計算するべきではありません。 それは必要があり、効率的付加をハンドル(+)、減算(-)、乗算(*)、整数除算(/)、残り(%)、電源(**)、インクリメント(++)、デクリメント(--)、GCD、階乗、及び他の一般的な算術計算整数。整数の結果を生成しない平方根や対数などの関数を処理する機能はプラスです。記号計算を処理する機能はさらに優れています。 これが私がこれまでに見つけたものです: JavaのBigIntegerクラスとBigDecimalクラス:私はこれまでこれらを使用してきました。ソースコードを読みましたが、その下の計算がわかりません。それは私が学んだことのない理論やアルゴリズムに基づいているのかもしれません。 組み込みの整数型またはbc、Python、Ruby、Haskell、Lisp、Erlang、OCaml、PHP、その他の言語のコアライブラリ:これらのいくつかを使用しましたが、どのライブラリを使用しているかわかりません。彼らが使用している実装の種類。 私がすでに知っていること: 使用するchar小数点以下の桁用とchar*進文字列のため、および使用して数字上の計算を行うfor-loopを。 int(または、、long intまたはlong long)を基本的な「単位」として使用し、そのタイプの配列を任意の長整数として使用し、for-loopを使用して要素の計算を行います。 整数型を使用して、10進数(または数桁)をBCD(2進化10進数)として格納します。 ブースの乗算アルゴリズム。 私が知らないこと: 単純な方法を使用せずに、上記のバイナリ配列を10進数で出力します。単純な方法の例:(1)ビットを最低から最高に追加します:char*1、2、4、8、16、32 、…(2)上記の-文字列を使用して中間の小数の結果を格納します)。 私が感謝すること: GMP、MPFR、decNumber(またはあなたの意見で良い他のライブラリ)の良い比較。 私が読むべき本や記事に関する良い提案。たとえば、ナイーブでない2進化10進変換アルゴリズムがどのように機能するかを示す図があればよいでしょう。ダグラス・W・ジョーンズによる「限られた精度での2進化から10進への変換」という記事は良い記事の例です。 一般的なヘルプ。 (または、、または)を使用するとこの問題を簡単に解決できると思われる場合は、この質問に答えないでください。そう思うと、問題の問題を理解できません。doublelong doublelong long double
81 c++  c  biginteger  bigdecimal  gmp 

5
BigDecimalを最大2桁の10進数の文字列としてフォーマットし、小数部分の0を削除します
私はBigDecimal番号を持っていて、小数点以下2桁しか考慮しないので、次を使用して切り捨てます。 bd = bd.setScale(2, BigDecimal.ROUND_DOWN) 次に、文字列として出力しますが、0の場合は小数部分を削除します。次に例を示します。 1.00-> 1 1.50-> 1.5 1.99-> 1.99 Formatter、formatter.formatを使用してみましたが、常に小数点以下2桁が表示されます。 これどうやってするの?たぶんbd.toPlainString()からの文字列に取り組んでいますか?

1
BigDecimalがfloatまたはdoubleに正確に変換できるかどうかを知る方法は?
クラスにBigDecimalは、無損失の変換を保証するいくつかの便利なメソッドがあります。 byteValueExact() shortValueExact() intValueExact() longValueExact() しかし、方法floatValueExact()およびdoubleValueExact()存在しません。 メソッドfloatValue()とのOpenJDKソースコードを読みましたdoubleValue()。両方がそれぞれFloat.parseFloat()とにフォールバックしているように見え、Double.parseDouble()正または負の無限大を返す可能性があります。たとえば、10,000 9の文字列を解析すると、正の無限大が返されます。私が理解しているように、にBigDecimalは無限の内部概念はありません。さらに、100件のように9Sの文字列を解析double与える1.0E100無限大ではなく、精度を失います。 合理的な実装floatValueExact()とは何doubleValueExact()ですか? 私が考えたdouble組み合わせにより、溶液BigDecimal.doubleValue()、BigDecial.toString()、Double.parseDouble(String)そしてDouble.toString(double)、それは乱雑に見えます。もっと簡単な解決策があるかもしれないので、ここで質問したいと思います。 明確にするために、私は高性能ソリューションは必要ありません。
10 java  bigdecimal 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.