SQL Serverで浮動小数点数を小数点(28,10)に変換する必要があります。私の問題は、浮動小数点の性質と変換が行われる方法のために、単に浮動小数点をキャストすると、ユーザーに間違った番号が表示されることがあります。例えば浮動小数点数を10進数に変換
:
Float: 280712929.22
Cast as Decimal: 280712929.2200000300
What I think I want: 280712929.2200000000
私は道フロート作品(それはおおよそのデータ・タイプなどだということ)について少し理解して、それが最後に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)に変更する可能性があります。長期目標は、データを取得しているフロートの列を10進数に変換することです。
編集:時々、私が持っている浮動小数点数は、必要以上に小数点以下を持つことがあります。例:-0.628475064730907。この場合、-0.6284750647へのキャストは問題ありません。私は小数点以下10桁まで浮動小数点の最後にゼロを追加するために基本的に結果が必要です。
は、たぶん私は答えを見つけました。 http://stackoverflow.com/questions/34316871/how-can-the-following-result-of-casting-from-float-to-numeric-be-explained –