XSL和欧洲格式货币(当提供的数字值具有逗号时为小数)

问题描述:

格式数字函数似乎无法处理格式化的欧洲数字。有什么我可以做的功能“数字”的参数,以便它的工作?欧洲程序员对此做了什么?XSL和欧洲格式货币(当提供的数字值具有逗号时为小数)

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

<!-- 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号码,以便它能正常工作?

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

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

+0

谢谢..有用! – John 2011-01-19 18:43:21

的设计意图是,XML应该代表的数值,如“国际标准”格式的日期和数字,并演示应该再视个人用户的喜好进行本地化。所以格式编号被设计为将“国际格式”编号作为输入,并产生“本地编号”作为输出。如果您的XML设计不符合该惯例,则必须“手动”转换它,例如使用XSLT 1.0中的translate()或XSLT 2.0中的正则表达式。

+0

所以,你说的是,字段值应该从1234,56转换为1234.56,因为它成为xml的一部分...因为这是格式数函数期望它的方式吗?果然,尽管上面的翻译功能确实有效,但我们最终改变了它,以便xml值为1234.56而不是1234,56。 – John 2011-01-19 18:48:29