1

今日の問題は次のとおりです。Oracle データベースにテーブルがあります。テーブルには Number(18, 3) 型のフィールドが含まれています。

表面的には、フィールドからのデータの保存と読み込みの両方が完全に機能します。しかし、さらに調べてみると、500.001 などの 3 桁の 10 進数を含む数値は、10 進数の文字列表現が 4 番目のゼロ桁 (500.0010 など) を持つようにデータベースから読み取られることがわかります。これは、10 進数の 3 桁目がゼロ以外の場合に発生するようです。

数学的には、これは問題ではありません。ただし、10 進数を文字列に変換してから 10 進数の桁数をカウントすることで、10 進数の 10 進数の桁数を検証するバリデーターがあります。この特定のデータは、最大 3 桁の 10 進数を持つように定義されているため、余分なゼロは検証エラーの原因になります。

バリデーターを変更できないので、数値を文字列に変換し、末尾のゼロをトリミングしてから再解析する以外に、余分なゼロなしで小数を取得するクリーンな方法があるかどうか疑問に思っています。それとも、まったく別のことをする必要がありますか?

4

2 に答える 2

2

これを試して:

decimal trimmed = ((decimal)((int)(number * 1000))) / 1000

intにキャストすると、小数部分が削除されます。すべての括弧は必要ありませんが、操作の順序が明示的に示されていると、何が起こっているのかがわかりやすくなると思います。

于 2009-11-27T07:52:20.683 に答える