問題タブ [bigdecimal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java:文字列を有効な金額(BigDecimal)に変換する正しい方法は何ですか?
入力文字列フィールドを、有効な金額を表す BigDecimal フィールドに変換する必要があります。次に例を示します。
文字列をJavaで有効な金額に変換するために使用する正しいAPIは何ですか(例: apache commons library)?
前もって感謝します、
javascript - JavaScript用の10進数学ライブラリはありますか?
JavaScriptで10進数ベースの数学、場合によっては任意精度を実行するための成熟したライブラリはありますか?
編集:浮動小数点関連の問題と、バイナリ浮動小数点が不適切な場合に使用する代替案に関するリファレンスページのこの情報が必要です:http://floating-point-gui.de/
java - JavaへのJava 1.4に移行するときのBigDecimalの問題を避ける1.5+
私は最近のJava 6環境へのJava 1.4のアプリケーションを移行しました。残念ながら、私は問題が発生しBigDecimal
、Oracleデータベースに格納。私が保存しようとすると、要約すると"7.65E+7"
BigDecimal値を(76,500,000.00
実際には、データベース内)の値をOracleの店を7,650,000.00
。この不具合はのrewrittingによるものであるBigDecimal
(参照のJava 1.5でクラスここ)。
私のコードでは、は次の種類のコードを使用してBigDecimal
作成されました。double
99%以上の場合、すべてが正常に機能します。非常にまれなケースを除いて、上記のバグが発生します。そして、それは非常に迷惑です。
のStringコンストラクターの使用を回避するために前のコードを変更した場合、ユースケースでBigDecimal
バグは発生しません。
ただし、このソリューションがの使用を処理する正しい方法であることをどのように確認できますBigDecimal
か?
だから私の質問は、私は私の管理しなければならない方法を知っているBigDecimal
この問題を回避するために、値を:
- コンストラクターを使用せず、
new BigDecimal(String)
直接new BigDecimal(double)
? - 処理するときにメソッド
toPlainString()
の代わりにOracleを使用するように強制しますか(この場合はその方法)?toString()
BigDecimal
- 他の解決策はありますか?
環境情報:
- Java 1.6.0_14
- Hibernate 2.1.8(はい、かなり古いバージョンです)
- Oracle JDBC 9.0.2.0であり、10.2.0.3.0でもテスト済み
- Oracleデータベース10.2.0.3.0
編集:同じコードを誤ってテストしましたが、OracleJDBCバージョン10.2.0を使用しました。4.0とバグは発生しませんでした!保存された値は確かに76,500,000.00
...変更ログに関しては、バグ#4711863に関連している可能性があります。
java - Scala と Java BigDecimal
アプリの Math ベースのモジュールを Java からスクリプト言語に切り替えたいと考えています。これは、mathy Java の読みやすさと機能上の制限によるものです。
たとえば、Javaではこれがあります:
ご覧のとおり、BigDecimal 演算子のオーバーロードがなければ、単純な数式がすぐに複雑になります。
double の場合、これは問題ないように見えますが、精度が必要です。
私はScalaでこれができることを望んでいました:
そして、デフォルトでは小数のような振る舞いをしますが、悲しいことに、Scala はデフォルトで小数計算を使用しません。
次に、Scala で次のようにします。
そして、私はまだ不正確な結果を得ています。
Scala で正しく行っていないことはありますか?
おそらく、Groovy を使用して読みやすさを最大化する必要があります (デフォルトでは小数を使用します)。
java - BigDecimal を使用する場合、Java の代わりとして Groovy を使用しますか?
Java、Groovy、および Scala の評価を完了しました。
私が考慮した要因は次のとおりです。読みやすさ、精度
知りたい要素: パフォーマンス、統合の容易さ
BigDecimal レベルの精度が必要でした。
ここに私の結果があります:
ジャワ
グルーヴィー
スカラ
Java と Scala では静的インポートを使用したことに注意してください。
Java:
長所: Java
短所: 演算子のオーバーロードがない (多くのメソッド)、かろうじて読み取り/コード化可能
Groovy:
長所: デフォルトの BigDecimal は目に見えるタイピングがないことを意味し、すべての演算 (除算を含む) に対する BigDecimal のサポートは驚くほど少ない
短所: 別の言語を学ぶ必要がある
Scala:
長所: BigDecimal の演算子のオーバーロードがあります
短所: 除算による驚くべき動作 (Decimal128 で修正)、別の学習言語
java - Lucene 3.0.1 で BigDecimal 値にインデックスを付ける方法
検索用にインデックスを作成する必要がある BigDecimal 値がいくつかあります。Lucene には NumericField がありますが、setter は long、double、float、int のみです。これを文字列として保存することはできますが、NumericRangeQuery のメリットはありません。
BigDecimals をどのように保存しましたか? 共有するベストプラクティスはありますか?
java - BigDecimal.divide中にスローされたArithmeticException
java.math.BigDecimal
10進数で無限精度の演算を実行する必要性に対するAnswer™だと思いました。
次のスニペットについて考えてみます。
私は合格することを期待しassert
ていますが、実際には実行はそこに到達していません:スローされるone.divide(three)
原因です!ArithmeticException
この動作はAPIで明示的に文書化されていることがわかります。
の場合
divide
、正確な商は無限に長い小数展開を持つ可能性があります。たとえば、1を3で割った値です。商に非終了の小数展開があり、正確な結果を返すように演算が指定されている場合、anArithmeticException
がスローされます。それ以外の場合は、他の操作の場合と同様に、除算の正確な結果が返されます。
APIをさらに参照すると、実際には、不正確な除算divide
を実行するさまざまなオーバーロードがあることがわかります。
もちろん、今の明らかな質問は「ポイントは何ですか?」です。財務計算など、正確なBigDecimal
算術が必要な場合の解決策だと思いました。正確に言えない場合、これはどれほど役立つでしょうか?それは実際に一般的な目的を果たしますか、それとも幸いなことにまったく必要のない非常にニッチなアプリケーションでのみ役立ちますか?divide
divide
これが正しい答えではない場合、財務計算の正確な除算に何を使用できますか?(つまり、私は財務専攻を持っていませんが、彼らはまだ除算を使用していますよね???)。
jruby - ruby 環境での java.bigDecimal 除算
Javaクラスを含むRubyの正しいスクリプト
スクリプト中に、2 つの java.bigDecimal を除算する必要があります
この IDE にはインテリセンスがないため、構文が正しいかどうかわかりません。実行時エラーは次のとおりです。
初期化されていない定数::HALF_EVEN
- ruby スクリプト内の Java オブジェクトを正しい方法で結合する必要がありますか?
- ruby envで2つのjava.bigDecimalオブジェクトを分割するにはどうすればよいですか?
ruby - BigDecimal が解析に失敗したかどうかを知るにはどうすればよいですか?
csv からデータをインポートしています。いくつかの値を BigDecimal にキャストし、解析できない場合はエラーを発生させる必要があります。
テストから、BigDecimal("invalid number") は 0 の BigDecimal を返します。
Float("invalid number") は動作が異なり、例外がスローされます...
私の現在の解決策は次のとおりです。
私は何かを完全に見逃していますか?
database - JAXB、BigDecimal、または double?
私はさまざまな Web サービスに取り組んでおり、常に WSDL First を使用しています。
JAXB は、次のようなタイプを生成します。
Java バインディング タイプBigDecimal
(JAXB 仕様で言及されているとおり)。
double
次に、型の値(データベースに格納され、休止状態を介して double 型にマップされる) を使用して簡単な算術演算を行うと、問題が発生します。
正しい方法は何ですか?
- すべての値を double に変換します (JAXB バインディング から
BigDecimal
へdouble
) - へのマッピング
double
を休止状態にするBigdecimal
すべての算術演算を 1 つのオブジェクト タイプで実行します。