Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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 xquery天花板函数的奇怪结果_Vb.net_Xpath_Xquery - Fatal编程技术网

Vb.net xquery天花板函数的奇怪结果

Vb.net xquery天花板函数的奇怪结果,vb.net,xpath,xquery,Vb.net,Xpath,Xquery,我正在开发一个运行在.NETFramework 2.0.50727.3603上的VB.Net应用程序 当我发出这个xquery语句时,我得到56,但预期是55: ceiling(.55*100) 我只在.55和.56上看到奇怪的结果,正如你在下面看到的结果: ceiling(.50*100) = 50 ceiling(.51*100) = 51 ceiling(.52*100) = 52 ceiling(.53*100) = 53 ceiling(.54*100) = 54 ceiling(.

我正在开发一个运行在.NETFramework 2.0.50727.3603上的VB.Net应用程序

当我发出这个xquery语句时,我得到56,但预期是55:

ceiling(.55*100)
我只在.55和.56上看到奇怪的结果,正如你在下面看到的结果:

ceiling(.50*100) = 50
ceiling(.51*100) = 51
ceiling(.52*100) = 52
ceiling(.53*100) = 53
ceiling(.54*100) = 54
ceiling(.55*100) = 56 (would expect 55)
ceiling(.56*100) = 57 (would expect 56)
ceiling(.57*100) = 57
ceiling(.58*100) = 58
ceiling(.59*100) = 59
ceiling(.64*100) = 64
ceiling(.65*100) = 65
ceiling(.66*100) = 66
你知道是什么引起的吗?这是xquery中的错误吗

以下是我的代码的基本要点:

Imports System.Xml
Dim objXPathNavigator As XPathNavigator
evaluateExpression = objXPathNavigator.Evaluate(objXPathExpression)

XSLT/XPath 1.0有一个单一的数字类型,一个与VB.NET double相同的双精度浮点类型。如果你跑

Dim doubleArray As Double() = {0.5, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59}
For Each d As Double In doubleArray
    Console.WriteLine("d: {0}; d * 100: {1}; Math.Ceil(d * 100): {2}", d, d * 100, Math.Ceiling(d * 100))
Next
使用.NET,您将发现与XPath计算类似的奇怪之处


因此,问题在于XPath 1.0(或其他语言)中该数字类型的精度有限,十进制表示(例如0.55)是有限的,但二进制表示可能不是。如果您需要更好的精度,您需要考虑移动到XPath 2,目前只支持第三方产品(如Sxon 9或XQSpple),在这里您可以使用XS:Delphi类型,而不是数字类型。

完美解释马丁,非常感谢!看起来我可能需要研究XPath2.0的升级。你必须接受这个答案——这是SO官方的和预期的感谢形式。为此,只需单击最佳答案旁边的绿色复选标记。