新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论XSL,XSLT,XSL-FO,CSS等技术
    [返回] 计算机科学论坛XML.ORG.CN讨论区 - XML技术『 XSL/XSLT/XSL-FO/CSS 』 → 求助:xslt或xquery中求sum()时结果值不准确(小数点后位数过多)的解决办法 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 15645 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 求助:xslt或xquery中求sum()时结果值不准确(小数点后位数过多)的解决办法 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     hanll 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:9
      积分:94
      门派:XML.ORG.CN
      注册:2005/3/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanll发送一个短消息 把hanll加入好友 查看hanll的个人资料 搜索hanll在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hanll的博客楼主
    发贴心情 求助:xslt或xquery中求sum()时结果值不准确(小数点后位数过多)的解决办法

    如题,sum("\\Grade")时,结果值有时不对  小数点后有时会增加了好多位

    请问,有没有什么好的解决办法? 3Q


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/21 14:34:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客2
    发贴心情 
    能把你的简化程序贴出来吗?这样有个参照大家才能更好的给你想办法啊
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/21 16:52:00
     
     hanll 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:9
      积分:94
      门派:XML.ORG.CN
      注册:2005/3/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanll发送一个短消息 把hanll加入好友 查看hanll的个人资料 搜索hanll在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hanll的博客3
    发贴心情 
    xml文件:

    <?xml version='1.0' encoding='GB2312'?>
        
    <Layout>
       <ROW num="1">
          <F281>于小姐</F281>
          <F286>12</F286>
          <F284>&Ouml;í&Egrave;&acirc;</F284>
          <F287>168</F287>
          <F285>14</F285>
          <F283>1</F283>
       </ROW>
       <ROW num="2">
          <F281>于小姐</F281>
          <F286>12</F286>
          <F284>&sup2;&Uacute;&Atilde;×</F284>
          <F287>98</F287>
          <F285>9.8</F285>
          <F283>2</F283>
       </ROW>
       <ROW num="3">
          <F281>于小姐</F281>
          <F286>12</F286>
          <F284>&Euml;á&Auml;&Igrave;&Agrave;&Ograve;</F284>
          <F287>174</F287>
          <F285>34.8</F285>
          <F283>3</F283>
       </ROW>
       <ROW num="4">
          <F281>谢小姐</F281>
          <F286>9</F286>
          <F284>&Eacute;&sup3;&sup2;è</F284>
          <F287>167.4</F287>
          <F285>18.6</F285>
          <F283>4</F283>
       </ROW>
       <ROW num="5">
          <F281>谢小姐</F281>
          <F286>9</F286>
          <F284>&Ouml;í&Egrave;&acirc;&cedil;&Eacute;</F284>
          <F287>1696</F287>
          <F285>42.4</F285>
          <F283>5</F283>
       </ROW>
       <ROW num="6">
          <F281>谢小姐</F281>
          <F286>10</F286>
          <F284>&Iuml;&ordm;×&Oacute;</F284>
          <F287>77</F287>
          <F285>7.7</F285>
          <F283>6</F283>
       </ROW>
       <ROW num="7">
          <F281>谢小姐</F281>
          <F286>35</F286>
          <F284>&Ouml;í&Egrave;&acirc;&cedil;&Eacute;</F284>
          <F287>1484</F287>
          <F285>42.4</F285>
          <F283>7</F283>
       </ROW>
    </Layout>
    =======================================
    xslt文件如下:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0" xmlns:math="http://exslt.org/math"  extension-element-prefixes="math">


    <!--exsl:function name="num:sum">
       <xsl:param name="node-set" select="/.." />
       <xsl:param name="expr" select="'.'" />
       <xsl:variable name="value-of-first"
                        select="number(com:eval($node-set[1], $expr))" />
       <xsl:choose>
          <xsl:when test="count($node-set) <= 1">
             <exsl:result select="$value-of-first" />
          </xsl:when>
          <xsl:otherwise>
             <exsl:result select="$value-of-first +
                                     num:sum($node-set[position() != 1], $expr)" />
          </xsl:otherwise>
       </xsl:choose>
    </exsl:function-->
     
     <xsl:template match="Layout">
      <HTML>
       <HEAD>
        <TITLE>City Data</TITLE>
       </HEAD>
       <BODY>
        <H1>City Data</H1>
        <TABLE BORDER="1" CELLPADDING="5">
         <xsl:for-each-group group-by="F281" select="ROW">
          <TR>
           <TD>
            <xsl:value-of select="F281"/>
           </TD>
           <xsl:for-each-group select="current-group()" group-by="F286">
                    <TD>
              <xsl:value-of select="F286"/>
             </TD>
                
            
           <TD>
    Number:      <xsl:value-of select="sum(current-group()/F285)"/>
           </TD>
           <TD>
    Text:      <xsl:value-of select="current-group()/F284" separator="/"/>
           </TD>
           </xsl:for-each-group>
          </TR>
          
         </xsl:for-each-group>
        </TABLE>
       </BODY>
      </HTML>
     </xsl:template>
    </xsl:stylesheet>

    =======================================

    编译:
    java net.sf.saxon.Transform groupxsl.xml groupxsl.xsl >groupxsl.html

    结果页面:
    <HTML>
       <HEAD>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       
          <TITLE>City Data</TITLE>
       </HEAD>
       <BODY>
          <H1>City Data</H1>
          <TABLE BORDER="1" CELLPADDING="5">
             <TR>
                <TD>余小姐</TD>
                <TD>12</TD>
                <TD>
                   Number:      58.599999999999994
                </TD>
                <TD>
                   Text:      猪肉/糙米/酸奶酪
                </TD>
             </TR>
             <TR>
                <TD>谢小姐</TD>
                <TD>9</TD>
                <TD>
                   Number:      61
                </TD>
                <TD>
                   Text:      沙茶/猪肉干
                </TD>
                <TD>10</TD>
                <TD>
                   Number:      7.7
                </TD>
                <TD>
                   Text:      虾子
                </TD>
                <TD>35</TD>
                <TD>
                   Number:      42.4
                </TD>
                <TD>
                   Text:      猪肉干
                </TD>
             </TR>
          </TABLE>
       </BODY>
    </HTML>

    ================================
    58.599999999999994 !!!!!

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/21 17:06:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客4
    发贴心情 
    哦,这个问题啊,呵呵。没有办法这个是XSLT中对于浮点的处理,可以先乘上一个10^n,然后做完加法后再除以10^n就好了:)
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/21 17:29:00
     
     hanll 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:9
      积分:94
      门派:XML.ORG.CN
      注册:2005/3/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanll发送一个短消息 把hanll加入好友 查看hanll的个人资料 搜索hanll在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hanll的博客5
    发贴心情 
    10^n ?? 是什么意思?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/21 17:57:00
     
     hanll 美女呀,离线,快来找我吧!
      
      
      等级:大一新生
      文章:9
      积分:94
      门派:XML.ORG.CN
      注册:2005/3/16

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hanll发送一个短消息 把hanll加入好友 查看hanll的个人资料 搜索hanll在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看hanll的博客6
    发贴心情 
    怎么改xslt呢?sum(current-group()/F285) 改成什么?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/21 17:58:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客7
    发贴心情 
    呵呵,10^n就是10的n次方啊,就是要把你的数搞大些,然后再除就好了,然后再缩小回去啊。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/3/24 8:57:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 XSL/XSLT/XSL-FO/CSS 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/12/29 16:32:22

    本主题贴数7,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    89.844ms