当提供的数字值为十进制逗号时,XSL和欧洲货币格式

时间:2011-01-19 15:32:54

标签: xslt

format-number函数似乎无法处理格式化的欧洲数字。我可以对该功能的“数字”参数做些什么,以便它可以工作吗?欧洲程序员对此做了什么?

例如; 下面的代码适用于使用小数创建十进制格式的情况,并且定义了分组分隔符,并且当格式号的“number”参数提供句点“。”时。作为初始小数分隔符。

    <!-- define number format to use -->
    <xsl:decimal-format 
         name="european" 
         decimal-separator=',' 
         grouping-separator='.' />  
    <!-- format the number -->
    <xsl:value-of select="format-number(1234.56,
                                        '#.##0,00;(#.##0,00)',
                                        'european')"/>

但是,如果提供的数字参数已经部分为欧元格式,则数字如1234,56 ...其中逗号“,”最初是数字而不是句号“。”,然后是格式数字函数将返回“NaN”。

有人有办法解决这个问题吗?或者您是否将最初提供的1234,56转换为1234.56以便它可以工作?

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

对于任何数值数据,您应该使用数字格式XSLT / XPath识别(即XSLT / XPath 1.0的双格式或者架构规范使用XSLT / XPath 2.0定义的格式之一)并且只为其格式化根据需要输出表示。如果你有不同格式的输入数据,那么你确实需要先用字符串函数将其转换为XSLT / XPath接受的格式。 number(translate('1234,56', ',', '.'))是XPath 1.0中最简单的方法,或者在XPath 2.0中使用relace。

答案 1 :(得分:0)

设计意图是XML应以“国际标准”格式表示日期和数字等值,然后应根据各个用户的偏好对本地化进行本地化。因此,format-number被设计为将“国际格式”数字作为输入,并产生“本地化数字”作为输出。如果XML的设计不遵循该约定,则必须“手动”转换它,例如使用XSLT 1.0中的translate()或XSLT 2.0中的正则表达式。