移植JavaScript函数VB.NET

时间:2017-03-18 23:11:51

标签: javascript vb.net

我试图将这个看似简单的JavaScript函数移植到VB.NET:

function getFractionalBits(n) {
    return ((n - (n | 0)) * 0x100000000) | 0;
}

该功能取自here

我最终得到的结论相当简单:

Public Shared Function GetFractionalBits(n As Double) As Long
    Return (((n Or 0) - 1) * &H100000000) Or 0
End Function

请注意,我已将n - (n | 0)更改为n - ((n Or 0) - 1),因为我注意到VB.NET中的结果与1不同。不可否认,我不确定原因。

对于许多输入,它提供与JavaScript函数相同的结果。但是,对于某些输入,我得到的结果是它应该是什么。例如,78.9在两种情况下都返回-429496730,但78.6在VB.NET中返回-1717986918,在JavaScript中返回-1717986919。在我尝试过的所有测试用例中,它从不超过1。

我决定进行调查,发现前面提到的表达式n - (n | 0)n - ((n Or 0) - 1)返回的值略有不同 - 在JavaScript中,第一个返回0.5999999999999943。在VB.NET中,第二个返回0.599999999999994。尽管两者都是64位浮点数,但它似乎略微不那么精确。

我尝试通过n - Math.Floor(n)以另一种更简单的方式获取小数部分。但是,它并不准确;最后3个仍然缺失。

我可能做错了什么?

0 个答案:

没有答案