XQuery中的类型转换异常问题咨询
问题原因解析
这是因为fn:number()函数返回的是64位二进制浮点数(double类型),而十进制的10.12无法用二进制浮点数精确表示——二进制浮点数在存储这类十进制小数时,只能存储一个近似值,只是多数环境会在显示时将这个近似值四舍五入为直观的10.12,让你误以为它是精确值。
当你调用xs:decimal(fn:number('10.12'))时,本质是把这个不精确的double近似值转换为decimal类型,这时候就会暴露它真实的存储值:10.1199999999999992184029906638897955417633056640625。
如果想要直接得到精确的decimal类型10.12,应该跳过fn:number(),直接用xs:decimal('10.12'),这样会直接把字符串解析为精确的十进制小数。
内容的提问来源于stack exchange,提问作者Pallab Mahata
相关产品推荐
相关产品推荐

