Delphi中的Trunc方法

5

我正在将一些代码移植到.Net平台,发现Delphi中的Trunc方法无法正常工作。它无法区分截断正数还是负数,而是将参数视为绝对值。

Delphi

Trunc(-163.78999) returns -163

.Net实现

System.Math.Floor(-163.88888888888889) returns -164.

我可以模仿实现,但我想知道是否有人之前见过这种情况。

谢谢,


12
“Trunc”不等于“Floor”。是哪一部分文档让您认为“Trunc”总会向下取整而不是朝零(这通常是截断的含义)?请注意,Math.Truncate也将表现出相同的行为。 - Jon Skeet
4
Math.Truncate 怎么样? - spender
谢谢Jon...那是我的疏忽。 - Sam
没关系,这种情况很常见。对于打字错误,我们有“无法再现的问题”或“简单的排版错误”关闭投票原因。[我没有点踩,但我也不会点赞,因为我认为即使是一个错误地声称“Delphi中的Trunc方法不能正常工作”的问题,也不应该在这里被搜索到] - TLama
1个回答

12
Delphi的Trunc函数性能符合设计预期。文档表示(重点在于):

将实数截断为整数。

在Delphi代码中,Trunc函数将实型值截断为整型值。X是一个实型表达式。Trunc返回一个Int64值,它是向零舍入的X的值

Delphi等价于.net的System.Math.FloorFloor
与Delphi Trunc相对应的.net版本是Math.Truncate

谢谢...实际上,我正在移植代码,我看到之前的程序员使用了依赖于System.Math.Floor的Trunc。现在一切都说得通了...数学是相同的。谢谢。 - Sam
1
也许值得补充的是,名称也相当直观:Truncate 将通过截去小数部分来简化值。它不需要考虑符号或朝零方向舍入(朝零方向舍入有些巧合)。 - Disillusioned

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接