Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VB.NET中移植JavaScript函数_Javascript_Vb.net - Fatal编程技术网

在VB.NET中移植JavaScript函数

在VB.NET中移植JavaScript函数,javascript,vb.net,Javascript,Vb.net,我正在尝试将这个看似简单的JavaScript函数移植到VB.NET: function getFractionalBits(n) { return ((n - (n | 0)) * 0x100000000) | 0; } 该函数取自 我得到的结果相当简单: Public Shared Function GetFractionalBits(n As Double) As Long Return (((n Or 0) - 1) * &H100000000) Or 0 En

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

function getFractionalBits(n) {
    return ((n - (n | 0)) * 0x100000000) | 0;
}
该函数取自

我得到的结果相当简单:

Public Shared Function GetFractionalBits(n As Double) As Long
    Return (((n Or 0) - 1) * &H100000000) Or 0
End Function
请注意,我将
n-(n | 0)
更改为
n-((n或0)-1)
,因为我注意到VB.NET中的结果相差1。诚然,我不知道为什么

对于许多输入,它给出与JavaScript函数相同的结果。然而,对于一些输入,我得到的结果与应该得到的结果相差一倍。例如,
78.9
在这两种情况下都返回
-429496730
,但是
78.6
在VB.NET中返回
-1717986918
,在JavaScript中返回
-1717986919
。在我尝试过的所有测试用例中,它的关闭次数从未超过1次

我决定进行调查,发现前面提到的表达式,
n-(n | 0)
n-((n或0)-1)
返回的值非常微小——在JavaScript中,第一个返回的值
0.59999999999943
。在VB.NET中,第二个返回
0.5999999994
。尽管两者都是64位浮点数,但它的精确度似乎稍差一些

我试着用另一种更简单的方法得到分数部分,方法是做
n-Math.Floor(n)
。然而,这并不准确;最后3个仍然不见了


我可能做错了什么?

这只是一个猜测,但您是否尝试将
n改为十进制
,将
n改为双精度
?事实上,是的。我正在修改它,因为我打了这个问题,忘记了改变问题反映了这一点。我现在已经更新了它。我得到了与JS函数的精确端口
((n-(n或0))*&H100000000)或0
以及另一种方法
(n-math.天花(n))*&H100000000
相同的结果。除了在JS和.NET Framework之间处理这些计算的不同方法之外,我看不到其他解释,这在精度上是有限的。如果关闭选项Strict,我无法重现您的示例结果。代码没有使用选项Strict On进行编译,因此我只能猜测代码中的其他地方存在更多变量类型不匹配。您声明您使用了
n-((n或0)-1)
,但显示的代码中没有使用(尽管如此,我还是尝试了这两种方法)。也许这本书对你有用。