banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

マイバティスのBigDecimalマッピングの問題

Mybatis は、numberic と decimal を使用してデータベースの型をマッピングする際、小数点以下が長いか整数部が長い場合、データを String で渡す必要がある場合でも、Mybatis はデータを BigDecimal としてマッピングします。しかし、Mybatis は.toString () を使用して変換するため、結果は科学的な表記法に変換される可能性があります。今日、あるデータベースに保存されている長い注文番号でこの問題が発生しました。話すのをやめて、コードを修正します。

// MyBatis の方法、BigDecimal の.toString () を直接呼び出す
// 浮動小数点数の印刷は正常です
new BigDecimal("10000000000").toString()
// >>10000000000

// 通常の数字の文字列、問題ありません、注文番号が制限を超えないことを誓います、数字の型を使用しても問題ありません
new BigDecimal("100.000").toString()
// >>100.000

// 末尾の余分な 0 を削除します、注文番号を保持するために、123 で始まる注文番号を使用し、0 を補完します
new BigDecimal("100.000").stripTrailingZeros().toString()
// >>1E+2

// 科学的な表記法を出力しないようにする、これが正しい方法です、MyBatis はどうしてこんなことをしているのか、この変換すら行わないのか、MyBatis はまだ何ができるのか?
new BigDecimal("100.000").stripTrailingZeros().toPlainString()
// >>100

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。