0

ドルの値を表す ODBC 接続を介して Pervasive SQL データベースの値を取得し、最も近いセントに丸めようとしています。ただし、TRUNCATE または ROUND 関数を実行すると、小数点以下の桁数が予想より多くなります。

たとえば、コマンド

select TRUNCATE(1234.12346345766,2), ROUND(1234.12346345766,2), TRUNCATE(ROUND(1234.12346345766,2),2);

以下を返します

+------------------------------+---------------------------+---------------------------------------+
| TRUNCATE(1234.12346345766,2) | ROUND(1234.12346345766,2) | TRUNCATE(ROUND(1234.12346345766,2),2) |
+------------------------------+---------------------------+---------------------------------------+
|           1234.1199999999999 |        1234.1199999999999 |                    1234.1099999999999 |
+------------------------------+---------------------------+---------------------------------------+

私が期待するのは次のようなものです

+------------------------------+---------------------------+---------------------------------------+
| TRUNCATE(1234.12346345766,2) | ROUND(1234.12346345766,2) | TRUNCATE(ROUND(1234.12346345766,2),2) |
+------------------------------+---------------------------+---------------------------------------+
|                      1234.12 |                   1234.12 |                               1234.12 |
+------------------------------+---------------------------+---------------------------------------+

これを修正するにはどうすればよいですか?

4

1 に答える 1

0

私は自分でそれを理解しましたが、この正確な質問に答えている他の投稿は見つかりませんでした(もしあれば私を殺さないでください).

これは、値が 10 進数ではなく double として格納されているためのようです (私が作業している環境の制限により、テーブル スキーマが表示されません)。

うまくいった解決策は、クエリを CAST() 関数でラップすることにより、データを DOUBLE から DECIMAL に変換することでした。

select CAST(TRUNCATE(1234.12346345766,2) as DECIMAL(10,2));
select CAST(ROUND(1234.12346345766,2) as DECIMAL(10,2));
select CAST(TRUNCATE(ROUND(1234.12346345766,2),2) as DECIMAL(10,2));

次の結果で

+-----------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------+
| CAST(TRUNCATE(1234.12346345766,2) as DECIMAL(10,2)) | CAST(ROUND(1234.12346345766,2) as DECIMAL(10,2)) | CAST(TRUNCATE(ROUND(1234.12346345766,2),2) as DECIMAL(10,2)) |
+-----------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------+
|                                             1234.12 |                                          1234.12 |                                                      1234.11 |
+-----------------------------------------------------+--------------------------------------------------+--------------------------------------------------------------+

これは私が望んでいたものに十分近いものです。

于 2020-03-05T19:29:40.273 に答える