2012-04-27 65 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