Mule DWL 2.0 для преобразования числа в слово

#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-значные числа