SQL ServerでFloatをDecimal(28,10)に変換する必要があります。私の問題は、floatの性質と変換の方法により、floatをキャストするだけで、ユーザーには間違った数値に見える可能性があることです。
例えば:
Float: 280712929.22
Cast as Decimal: 280712929.2200000300
What I think I want: 280712929.2200000000
floatの動作(おおよそのデータ型など)については少し理解していますが、最後に300が追加される理由を理解するには確かに十分ではありません。変換の副作用としての単なるゴミですか、それともフロートが実際に保存しているものをより正確に表現したものですか?私には、それは薄い空気から正確に引き出されたように見えます。
最終的には、正確であるだけでなく、「正しく」見える必要があります。末尾のゼロを追加したように見えるので、その一番下の数値を取得する必要があると思います。これは可能ですか?これは良い考えですか、それとも悪い考えですか、そしてその理由は何ですか?他の提案も歓迎します。
他のいくつかの例:
Float: 364322379.5731
Cast as Decimal: 364322379.5730999700
What I want: 364322379.5731000000
Float: 10482308902
Cast as Decimal: 10482308901.9999640000
What I want: 10482308902.0000000000
補足:これらの値を入力する新しいデータベーステーブルは、ユーザーが読み取ることができます。現在は小数点以下2桁しか必要ありませんが、将来変更される可能性があるため、Decimal(28,10)を使用することにしました。長期的な目標は、データを取得しているfloat列も10進数に変換することです。
編集:時々、私が持っている浮動小数点数は、私がこれまでに必要とするよりも多くの小数点以下の桁数を持っています、例えば:-0.628475064730907。この状況では、-0.6284750647へのキャストで問題ありません。基本的に、小数点以下10桁になるまで、フロートの最後にゼロを追加する結果が必要です。