Sybase ASE 12.5 を使用すると、次のような状況になります。
float 列に格納された 2 つの値を乗算すると値が得られます。
その値を varchar に変換する (または Java で取得する) と、浮動小数点数が近似した基になる正確な値が得られます。
私の問題は、フロートで表される値は正しいが、正確な値が問題を引き起こしていることです (厳密な丸め規則のため)。
例えば
declare @a float,@b float
select @a = 4.047000, @b = 1033000.000000
select @a*@b as correct , str(@a*@b,40,20) as wrong
与えます:
correct: 4180551.000000,
wrong: 4180550.9999999995343387
同様に、@a = 4.047000、@b = 1 の場合 ...取得します
correct: 4.047000,
wrong: 4.0469999999999997
( convert(varchar(30), @a*@b) と cast(@a*@b, varchar(30) を使用しても同じことが起こります)
Java で最初の例を丸めるのは簡単だと思いますが、さまざまなビジネス上の理由で実行できず、いずれにせよ 2 番目の例では機能しません。
float テーブルの列のデータ型も変更できません。
乗算積の浮動小数点表現を文字列または上記の実際の「正しい」値として取得する方法はありますか?
ありがとうクリス