0

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 テーブルの列のデータ型も変更できません。

乗算積の浮動小数点表現を文字列または上記の実際の「正しい」値として取得する方法はありますか?

ありがとうクリス

4

0 に答える 0