3

データベースにさまざまな列があります。ormliteを使用し、。を使用してSQLを実行しますgenericRawResults。私のコードは次のようなものです:

GenericRawResults<Total> rawResults =
    dao.queryRaw("select items*3 from Items", new RawRowMapper<Total>() {
        public Total mapRow(String[] columnNames,
            String[] resultColumns) throws SQLException {
                   return new Total(new BigDecimal(resultColumns[0]));
        }
        });

結果は、小数を失った数です。なんで?

cast(columnname as REAL)を使用しようとしましたが、結果は同じです。私に何ができる?ありがとう。

4

2 に答える 2

0

解決策を見つけました!!!!! 次のように Real を Varchar に変換します。

select id, factory, cast( SUM(Round((cast(Round((cast(price as REAL))*(cast((100-d1)/cast(100 as REAL) as REAL)),3) as REAL))* (cast((100-2)/cast(100 as REAL) as REAL)),3)* cast(units as REAL)) as VARCHAR) from Items group by id, factory

そして、私は小数を失いません!!!!

于 2012-06-14T14:55:52.300 に答える
0

Sqlite スキーマと のString結果を確認せずに、ここで何が問題なのかを具体的に知ることは困難ですitem*3

ただし、これはORMLiteの問題ではないと思われます。内部計算に小さな精度を使用するという点で、これは Sqlite の制限であると思われます。Sqlite コマンド ラインの例を次に示します。

select 11312541243231.01*3;
33937623729693.0  // << note the missing .03

クエリで を実行するのではなく、に変換された*3に乗算を実行することをお勧めします。次のようなものだと思います:BigDecimal

BigDecimal big = new BigDecimal(resultColumns[0]);
big.multiply(new BigDecimal(3));
于 2012-06-13T18:53:20.777 に答える