如果你有機會獲得提議的XQuery 3.0 math:
功能,計算的使用數量對數和移位除以和十的適當功率乘以相應的位數:
for $number in (527000.0, 11920.0, 131900.0, 5960.0, 14400.0, 7200.0, 17130.0, 8565.0, 42.0, 0)
let $log := if ($number > 0) then floor(math:log10($number)) else 1
let $pow := math:pow(10, $log - 3)
return concat($number, ': ', floor($number div $pow) * $pow)
這將返回預期的數字:
527000: 527000
11920: 11920
131900: 131900
5960: 5960
14400: 14400
7200: 7200
17130: 17130
8565: 8565
42: 42
0: 0
如果你堅持使用XQuery 1.0或沒有獲得先進的數學函數,它變得更有趣(醜陋的)。有些字符串操作呢?
for $number in (527000.0, 11920.0, 131900.0, 5960.0, 14400.0, 7200.0, 17130.0, 8565.0, 42.0, 0)
let $string := xs:string($number)
let $length := string-length($string)
return concat($number, ': ', substring($string, 1, 3), string-join(for $i in 4 to $length return '0'))
你當然可以轉換回數字了。我不確定是否會有更優雅的方式;如果代碼支持非自然數或非正數,則需要對此代碼進行擴展。
不幸的是我堅持的XQuery 1.0,這樣醜陋的做法可能被採納。感謝您的回覆,我會仔細研究一下。 – user1905307