在 xsl 中格式化科学数字表示形式
我的 XML -1.8959581529998104E-4
中有以下值。我想将其格式化为应该使用 XSL 给我 -0.000189595815299981
的确切数字。
format-number(-1.8959581529998104E-4,'0.000000;-0.000000') gives me NaN.
有什么想法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
XSLT 1.0 不支持科学计数法。
:
number('-1.8959581529998104E-4')
结果:
NaN
此:
number('-0.000189595815299981')
结果:
-0.000189595815299981
XSLT 2.0 支持科学记数
法:
number('-1.8959581529998104E-4')
结果:
-0.000189595815299981
编辑:一个非常简单的 XSLT 1.0 解决方法:
使用此输入:
输出:
XSLT 1.0 does not have support for scientific notation.
This:
number('-1.8959581529998104E-4')
Result:
NaN
This:
number('-0.000189595815299981')
Result:
-0.000189595815299981
XSLT 2.0 has support for scientific notation
This:
number('-1.8959581529998104E-4')
Result:
-0.000189595815299981
EDIT: A very simple XSLT 1.0 workaround:
With this input:
Output:
这是基于 user357812 的回答。但我让它像一个函数一样工作并处理非科学记数法
用法:
这应该处理科学记数法和十进制值的混合。
This is based on user357812 answer. But I made it act like a function and handle non-scientific notation
Usage:
This should handle a mix of scientific notation and decimal values.
没有模板的另一种可能的解决方法:
Another possible workaround without a template:
在 Moop 和 user357812 在一种特定场景中确定
vFactor
时。如果
vExponent
是一位正数(前面没有“+”号),则vFactor
将设置为空字符串。这是因为假设vExponent
的第一个字符是加号/减号,因此我们对第二个字符以后的字符感兴趣。然后,vMantissa
变量乘以一个空字符串,导致模板输出NaN
。如果
vExponent
是多位正数(前面没有“+”号),则vFactor
设置为不正确的值。由于上述假设,第一个数字被忽略,然后将vMantissa
乘以不正确的vFactor
。因此,我对之前发布的代码进行了一些修改,以便它可以处理以下形式的科学数字:2E-4、2E+4 和 2E4。
The logic doesn't appear to work correctly in the above answers by Moop and user357812 when determining
vFactor
in one particular scenario.If
vExponent
is a single-digit positive number (without a preceding '+' sign), thenvFactor
is set to an empty string. This is because an assumption was made that the 1st character ofvExponent
would be a plus/minus sign and therefore the 2nd character onwards were of interest. ThevMantissa
variable is then multiplied by an empty string which results in the template outputtingNaN
.If
vExponent
is a multi-digit positive number (without a preceding '+' sign), thenvFactor
is set to an incorrect value. Because of the aforementioned assumption, the 1st digit is ignored and thevMantissa
is then multiplied by an incorrectvFactor
.Therefore, I've modified the previously posted code a little so that it can handle scientific numbers of the forms: 2E-4, 2E+4 and 2E4.
刚刚在 Linux 下使用 1.1.24 版本中的 libxslt1.1 与 xsltproc 进行了尝试:
即使没有任何专用模板,XSLT 1.1 现在也能够以指数/科学格式读取,它似乎很简单:-))
Just tried this with xsltproc using libxslt1.1 in version 1.1.24 under Linux:
XSLT 1.1 is able to read in exponential/scientific format now even without any dedicated template, it seems to simply work :-))