Xslt中遇到的怪现象

colee 2003-07-28 06:28:29
使用Xslt里的Sum函数,会有这样的结果:

33.447+33.4 +33.4 +33.4 =133.64700000000002
33.447+33.44 +33.4 +33.4 =133.687
33.447+33.447 +33.4 +33.4 =133.69400000000002
33.447+33.447 +33.447 +33.4 =133.741

即有时会自动精确到小数点后14位,有时又不会,本来只想正常相加,不用精确。
象33.447+33.447 +33.447 +33.4 =133.741 就满足我了;
究竟怎么回事呢?
示例请看:
http://www.channelace.com.hk/xml.xml
...全文
196 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
123456754321 2003-11-07
  • 打赏
  • 举报
回复
脚本语言不适合进行精确计算。如果需要,先转换成整数再进行计算

*1000,/1000
lions911 2003-09-14
  • 打赏
  • 举报
回复
学习!
colee 2003-09-04
  • 打赏
  • 举报
回复
即用VBscript没有问题,
<script language="VBscript">
msgBox(33.447+33.4 +33.4 +33.4)
</script>
colee 2003-08-19
  • 打赏
  • 举报
回复
另外ASP用的也是脚本语言,结果就很正常
response.write 33.447+33.4 +33.4 +33.4 结果是输出133.647
colee 2003-08-19
  • 打赏
  • 举报
回复
我部机一般modern , CPU 是Inter(R)Celeron(TM)1300MHZ

到底是 IE或Mozilla 的原因,XSLT或JS本身原因?还是硬件原因?
能有确切说法吗?
孟子E章 2003-08-18
  • 打赏
  • 举报
回复
Javascript, like almost all other programming languages, uses native
'floating-point' routines at some point to do mathematical calculations.
These native routines are generally perfomed either by the CPU or a
math-coprocessing chip.

There are always rounding errors associated with floating-point
calculations due to the fact that all numeric values have to be stored
in some fixed number of bits. So expressions such as
2.71894734524524523466451945 may be rounded to fewer decimal places
internally. In this case, the above multiplied by 1000 could result in
2178.954734525 instead of 2718.94734524524523466451945, depending on the
precision of the CPU.

Your equation, however, should be easily handled by any modern hardware
processor. Chances are you have either a browser with a very bad
Javascript engine, or a computer with a defective processor. A few years
ago, Intel released some PII processors that where found to have a
defect in performing floating point operations, producing the kind of
error you see. Check the above URL for help if you think this may be the
case.
孟子E章 2003-08-18
  • 打赏
  • 举报
回复
具体参见

http://support.intel.com/support/processors/pentium/fdiv/
孟子E章 2003-08-18
  • 打赏
  • 举报
回复
脚本语言不适合进行精确计算。如果需要,先转换成整数再进行计算
colee 2003-08-18
  • 打赏
  • 举报
回复

今天发现,原来在Javascript里也有类似情况:

<script>
alert(33.447+33.4 +33.4 +33.4); //结果弹出133.64700000000002
alert(33.447+33.44 +33.4 +33.4); //结果弹出133.687
</script>

难道一定要手动格式化???
colee 2003-08-01
  • 打赏
  • 举报
回复

具体有人知道怎么回事嘛?
有无不用自己格式化的方法?
colee 2003-07-29
  • 打赏
  • 举报
回复
多谢楼上的回复,自己格式化,多少都有点点误差和别扭
我试过,在 Mozilla 浏览器里也一样
gzh_seagull 2003-07-29
  • 打赏
  • 举报
回复
这是msxml的问题,你要自己格式化数据
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:decimal-format name="numfrmt" />
<xsl:template match="/">
<html>
<head>
<title>TEST</title>
</head>
<body leftmargin="0" topmargin="0">
33.447+33.4 +33.4 +33.4 =<xsl:value-of select="format-number(sum(Root/order/test), '.###', 'numfrmt')"/>
<br/>
33.447+33.44 +33.4 +33.4 =<xsl:value-of select="format-number(sum(Root/order1/test), '.###', 'numfrmt')"/> <br/>
33.447+33.447 +33.4 +33.4 =<xsl:value-of select="format-number(sum(Root/order2/test), '.###', 'numfrmt')"/> <br/>
33.447+33.447 +33.447 +33.4 =<xsl:value-of select="format-number(sum(Root/order3/test), '.###', 'numfrmt')"/>
<xsl:for-each select="order">
</xsl:for-each>
</body>
</html>

</xsl:template>
</xsl:stylesheet>
gzh_seagull 2003-07-29
  • 打赏
  • 举报
回复
估计是IE的bug,我试过用其他的转换器没有问题
内容概要:本文针对孤岛微电网在运行中面临的功率分配不均、电压频率波动等问题,提出了一种基于多智能体一致性演化的自适应虚拟阻抗容错控制与二次稳态补偿机制,并通过Simulink平台进行仿真实现。研究采用多智能体系统(MAS)框架,将各分布式电源建模为具备局部信息交互能力的智能体,利用一致性算法实现全局协同控制;结合自适应虚拟阻抗技术动态调节等效输出阻抗,有效克服线路阻抗差异导致的有功与无功功率耦合问题,提升功率均分精度;同时设计二次控制补偿环节,消除一次下垂控制引入的静态偏差,恢复电压和频率至额定水平。该机制具备良好的容错能力,在部分节点发生故障或通信中断时可自动重构控制结构,维持系统稳定运行,适用于高可靠性和自治性要求的孤岛微电网场景。; 适合人群:具备电力系统、自动化或电气工程等相关专业背景,熟悉微电网控制、多智能体系统理论及现代控制方法的研究生、科研人员及工程技术人员。; 使用场景及目标:①为孤岛微电网提供高精度、强鲁棒性的分布式协同控制解决方案;②解决传统下垂控制中存在的功率分配不准与电能质量下降问题;③实现系统在故障扰动下的自主容错与快速恢复,提升微电网的自愈能力与运行可靠性。; 阅读建议:建议读者结合Simulink仿真模型深入理解控制策略的实现细节,重点关注多智能体通信拓扑构建、一致性协议设计、虚拟阻抗自适应律以及二次补偿控制器的参数整定方法,同时可通过修改故障场景和通信条件进行对比实验,全面掌握该机制的动态响应特性与适应范围。
内容概要:本文围绕“2026年华为杯E题”展开,聚焦于复杂场景下的多模态情感识别问题,提供一套完整的数学建模与算法设计解决方案,涵盖解题思路、代码实现与论文撰写指导,并持续更新优化。该资源隶属于“荔枝科研社”这一综合性科研服务平台,内容涉及智能优化算法、机器学习与深度学习、图像处理、路径规划、通信技术、信号处理、电力系统管理等多个前沿技术领域,主要采用MATLAB和Python作为开发工具,强调对实际科研与竞赛问题的建模仿真与算法优化,具有较强的实践性和应用价值。; 适合人群:具备一定编程基础和科研能力,从事或有意参与数学建模、人工智能、自动化、电气工程等相关领域的研究生、高校学生及科研工作者,尤其适合备战“华为杯”等高水平学科竞赛的参赛者。; 使用场景及目标:①为“2026年华为杯E题”参赛者提供系统性的解题思路、高质量代码参考与论文写作模板;②支持科研人员在多模态情感识别、深度学习建模、智能优化等领域开展算法验证与系统仿真研究;③辅助高校教师教学与学生自主学习,提升复杂工程问题的建模能力与编程实践水平。; 阅读建议:建议读者结合提供的网盘资源与在线目录进行系统性学习,优先选择与自身研究方向契合的技术模块,动手运行并调试代码,尝试复现论文成果,同时关注微信公众号“荔枝科研社”以获取最新资料更新与技术动态。

8,906

社区成员

发帖
与我相关
我的任务
社区描述
XML/XSL相关问题讨论专区
社区管理员
  • XML/XSL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧