微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xquery上限函数产生奇怪的结果

如何解决xquery上限函数产生奇怪的结果

| 我正在运行在.Net Framework 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.0(目前仅受Saxon 9或XQSharp等第三方产品支持),然后可以使用xs:decimal类型而不是number类型。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。