SQL Server 2008 には 3 つのテーブルがあります。
- 取引注文
- transact_shipments
- transact_child_orders.
それらのうちの 3 つには、共通の列Carrying_costがあります。データ型は 3 つのテーブルすべてで同じです。NUMERIC_PRECISION 53 と NUMERIC_PRECISION_RADIX 2 の float です。
テーブル 1 - transact_orders では、この列の値は 3 行で 5.1 です。convert(decimal(20,15), Carrying_cost) は
5.100000
..... を返します。表 2 - transact_shipments の 3 つの行は、transact_orders のこれらの 3 つの行から Carrying_cost をフェッチしています。convert(decimal(20,15), Carrying_cost) は
5.100000
..... ここでも戻ります。表 3 - transact_child_orders は、transact_shipments からのこれら 3 つの維持費を合計しています。そこに表示される値は
15.3
、通常の選択を実行したときのものです。
しかし、この厩舎にconvert(decimal(20,15), carrying_cost)
戻ります。そして、UIでも15.299999999999999
その値を示しています。precision gained
ui は値をフェッチするだけですが、変換は行いません。Java コードでは、db から値をフェッチする変数は として定義されていdouble
ます。
3 つの Carrying_costs を合計するステップ 3 のコードは単純です::
... sum(isnull(transact_shipments.carrying_costs,0)) sum_carrying_costs,
... ...
この変更が 3 番目のステップで発生する理由は何ですか? どんな助けでも大歓迎です。さらに情報が必要な場合はお知らせください。