我們正面臨使用XSLT舍入和格式數函數的一個非常奇怪的問題。可以說我有一個像131.855這樣的數字,我想把它舍入到小數點後兩位。我預計131.86作爲答案,但XSLT round()函數將其折算爲131.85。我嘗試使用「圓(131.855 * 100)div 100」,但它不起作用。而如果我必須四捨五入127.855這樣的數字,它會使用相同的代碼正確地舍入到127.86,即「round(127.855 * 100)div 100」。另外,奇怪的是,如果我嘗試將131.755四捨五入到131.76!很奇怪。 我們也嘗試過使用format-number()函數,但這也給出了奇怪的結果。例如,如果我採用編號349615.225,並且我使用格式編號(即格式編號(349615.225,'#。##')),它會給出349615.22,而我希望小數爲.23。但是,如果使用的131.855號格式它得到的轉換爲131.86 ...XSLT舍入問題
我也使用round()函數裏面號格式(嘗試),但它也給了相似的結果..
我們正在使用XSLT 1.0。更改爲XSLT 2.0似乎是一項艱鉅的任務。我看到的唯一解決方法是使用一些java函數,並從XSL中調用它來舍入。
任何想法將不勝感激。
編輯:
奇怪的是完全一樣的問題恰好與Java的Math.round功能。
您正在使用哪種XSLT處理器? –
這似乎是由浮點運算引起的錯誤。我已經設法重現了Xalan http://xsltransform.net/bFN1y8S和Saxon http://xsltransform.net/bFN1y8S/1中的問題 - 但是好奇地不在libxslt中,所以這可能是一個Java引擎問題。 –
「* Java的Math.round函數發生同樣的問題*」那麼你去吧。 –