#mule #transform #mulesoft
Вопрос:
Ввод: 123
результат: сто двадцать три
как преобразовать число в слово в dwl
Ответ №1:
Этот ответ был вдохновлен решением Java для рассматриваемой проблемы. Однако это недостаточно универсально и решает только для 3-значных чисел. Однако вы определенно можете расширить этот подход.
Скрипт
%dw 2.0
output json
import * from dw::Runtime
var units = [
"",
" one",
" two",
" three",
" four",
" five",
" six",
" seven",
" eight",
" nine"
]
var twoDigits = [
" ten",
" eleven",
" twelve",
" thirteen",
" fourteen",
" fifteen",
" sixteen",
" seventeen",
" eighteen",
" nineteen"
]
var tenMultiples = [
"",
"",
" twenty",
" thirty",
" forty",
" fifty",
" sixty",
" seventy",
" eighty",
" ninety"
]
var placeValues = [
" ",
" thousand",
" million",
" billion",
" trillion"
]
var inputNum = 413
fun wtonum(inp) = do {
var word =""
var index=0
---
if((inp mod 1000) != 0)
{ a: (conv(inp mod 1000) ) }
else ""
}
fun conv(numInp) = do {
var words = ""
var calc = if((numInp mod 100) < 10) {a: units[numInp]} else if ((numInp mod 100) < 20) {a: twoDigits[(numInp mod 100) mod 10]} else {a: (tenMultiples[(numInp mod 100)/10] units[(numInp mod 100) mod 10])}
---
if(numInp/100 > 0.99) units[numInp/100] " hundred" calc.a else calc.a
}
---
wtonum(inputNum)
Комментарии:
1. Он не работает для значений ниже 100, он выдает ошибку
2. Вызвал это в сообщении вместе с решением. Однако я изменил его, чтобы адресовать 2 и 3-значные числа