2012-04-27 5 views
1
Windows上

R15Bが得られます。そのことについてはとTRUNC

>trunc(1.9999999999999999999). 
2 

、ちょうどフロートリターン入力:

> 1.9999999999999999999.    
2.0 

私の知る限りを、切り捨て機能だけで小数部分をドロップする必要があります(少なくとも、とにかくそれが私の必要なものです)。フロア関数もトリックAFAIKを行うかもしれませんが、私が見たフロア実装はオンラインでの使用を示しています...あなたはそれを推測しました。

私はこれをニックピッキングしているわけではありませんが、私が実際に開発しているプログラムではこれが正しいことが必要です。

これに関するご意見はありますか?

ありがとうございました。

+5

をあなたが「正しい」ことを数字が必要な場合は、浮動小数点を使用しないでください。 – geoffspear

+0

役に立たなかった:1)これは私の質問に答えることさえしようとしない。 2)実際、切り詰めの必要性は、浮動小数点から離れて、まっすぐな整数で動作しようとする試みです。 –

+4

だから私は答えとして投稿しなかった。あなたの問題は、IEEE準拠の浮動小数点実装では、バイナリで1.9999999999999999999という数値を2.0以外のものとして表すことができないということです。 – geoffspear

答えて

0

問題は10進数がIEEE準拠バイナリ表現(32,64または128ビット)で表されることです。

実際に精度が必要な場合は、Binary Coded Decimalまたはfixed-point arithmeticなどの数値データ構造を使用する必要があります。

希望すると便利です。

0

あなたが浮かぶようにTRUNCを作りたい場合は、多分この1つは助けることができる:

select substring (convert(varchar(14), CAST (20160303013458 as varchar(14))) , 1 , 8) 
+0

質問は特にSQLではなくErlangに関するものです。したがって、これは完全に無関係です。 – Pyves

関連する問題