2012-04-27 68 views
1

R15b在Windows上給出了:二郎花車和TRUNC

>trunc(1.9999999999999999999). 
2 

對於這個問題,只是打字浮動收益:

> 1.9999999999999999999.    
2.0 

據我所知,在截斷功能應該只是下降的小數部分(至少無論如何,這就是我所需要的)。一個地板功能也可以做AFAIK的技巧,但我在網上發佈的地板實現使用...你猜對了...... trunc。

我並不挑剔這一點,實際上我需要這對我正在開發的程序來說是正確的。

對此的任何想法?

謝謝。

+5

如果你需要的數字是「正確的」,不使用浮動點。 – geoffspear 2012-04-27 11:09:15

+0

沒有幫助:1)這甚至不試圖回答我的問題。 2)事實上,我需要truncate是一個試圖擺脫浮線和直線整數的嘗試。 – 2012-04-27 11:19:14

+4

這就是爲什麼我沒有發佈它作爲答案。您的問題是符合IEEE標準的浮點實現不能以二進制表示數字1.9999999999999999999,而不是2.0。 – geoffspear 2012-04-27 11:20:44

回答

0

您的問題是十進制數表示爲符合IEEE標準的二進制表示形式(32,64或128位)。

如果您確實需要精度,您應該使用其他數值數據結構,如Binary Coded Decimalfixed-point arithmetic

希望這會有所幫助!

0

,如果你想使一個TRUNC浮動,也許這可以幫助:

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

現在的問題是關於Erlang而不是SQL,因此這完全不相關。 – Pyves 2017-12-27 13:23:29