0
Query qry = session.createSQLQuery(qrystr)
.addScalar("id", Hibernate.INTEGER)
.addScalar("balance",Hibernate.FLOAT);

    Object[] headerDetails=(Object[])qry.uniqueResult();
    session.close();
    System.out.println("balance"+headerDetails[1]);

上記のコードでは、クエリが実行されると、データベースから値 66996956 が 6.6996956E7 として返されます。

DOUBLE の場合でも、出力は 6.6996956E7 です。ただし、 math.BIG_DECIMAL が提供されている場合、値は正しいです。double と float に問題があるのはなぜですか。そして、コードでは、残りのデータが float であるため、bigdecimal を導入できます。

4

1 に答える 1

0

66996956 と 6.6996956E7 は同じ値ですが、表示が異なります。このように表示される理由を理解するには、ドキュメントを参照してください。

m が 10^-3 未満または 10^7 以上の場合、いわゆる「コンピュータ科学表記法」で表されます。

float と double が必然的に持つ精度の損失を気にしない場合 (大きな値の場合はさらに)、それらを使用してください。絶対に正確な値が必要な場合は、BigDecimal を使用してください。

于 2012-08-10T10:05:52.347 に答える