ODP ADO.NETドライバーは、文字列表現に余分なゼロを含む10進数を返します

StackOverflow https://stackoverflow.com/questions/1807285

質問

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

表面的には、上記のフィールドからのデータの保存と読み込みは完全に機能します。ただし、さらに詳しく調べると、小数点以下3桁の数字が含まれていることがわかります。 500.001は、10進数の string表現が4番目のゼロ桁(たとえば、500.0010)になるようにデータベースから読み取られます。これは、3番目の10進数がゼロ以外の場合に発生するようです。

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

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

役に立ちましたか?

解決

これを試してください:

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

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

他のヒント

同じ問題に遭遇しましたが、使用しました: number.ToString(" F3")

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top