From b53f634665c45371cb349c0c72807d7b03da1b80 Mon Sep 17 00:00:00 2001 From: Dvel Date: Fri, 23 Feb 2024 16:06:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20number=5Ftranslator.lua=20=E5=AF=B9?= =?UTF-8?q?=E6=95=B4=E6=95=B0=E5=86=8D=E6=AC=A1=E6=8B=86=E5=88=86=E7=9A=84?= =?UTF-8?q?=E9=94=99=E8=AF=AF=20fix=20#696?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/number_translator.lua | 61 ++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 33 deletions(-) diff --git a/lua/number_translator.lua b/lua/number_translator.lua index f48f5f9..1a8a82f 100644 --- a/lua/number_translator.lua +++ b/lua/number_translator.lua @@ -63,40 +63,35 @@ end -- 数值转换为中文 local function number2cnChar(num, flag, digitUnit, wordFigure) --flag=0中文小写反之为大写 - local st, result - num = tostring(num) - result = "" - local num1, num2 = math.modf(num) - if tonumber(num2) == 0 then - if tonumber(flag) < 1 then - digitUnit = digitUnit or { [1] = "万", [2] = "亿" } - wordFigure = wordFigure or { [1] = "〇", [2] = "一", [3] = "十", [4] = "元" } - else - digitUnit = digitUnit or { [1] = "万", [2] = "亿" } - wordFigure = wordFigure or { [1] = "零", [2] = "壹", [3] = "拾", [4] = "元" } - end - local lens = string.len(num1) - if lens < 5 then - result = formatNum(num1, flag) - elseif lens < 9 then - result = formatNum(string.sub(num1, 1, -5), flag) .. digitUnit[1] .. formatNum(string.sub(num1, -4, -1), flag) - elseif lens < 13 then - result = formatNum(string.sub(num1, 1, -9), flag) .. - digitUnit[2] .. - formatNum(string.sub(num1, -8, -5), flag) .. digitUnit[1] .. formatNum(string.sub(num1, -4, -1), flag) - else - result = "" - end - result = result:gsub("^" .. wordFigure[1], "") - result = result:gsub(wordFigure[1] .. digitUnit[1], "") - result = result:gsub(wordFigure[1] .. digitUnit[2], "") - result = result:gsub(wordFigure[1] .. wordFigure[1], wordFigure[1]) - result = result:gsub(wordFigure[1] .. "$", "") - if lens > 4 then result = result:gsub("^" .. wordFigure[2] .. wordFigure[3], wordFigure[3]) end - if result ~= "" then result = result .. wordFigure[4] else result = "数值超限!" end + local result = "" + + if tonumber(flag) < 1 then + digitUnit = digitUnit or { [1] = "万", [2] = "亿" } + wordFigure = wordFigure or { [1] = "〇", [2] = "一", [3] = "十", [4] = "元" } else - return "数值超限!" + digitUnit = digitUnit or { [1] = "万", [2] = "亿" } + wordFigure = wordFigure or { [1] = "零", [2] = "壹", [3] = "拾", [4] = "元" } end + local lens = string.len(num) + if lens < 5 then + result = formatNum(num, flag) + elseif lens < 9 then + result = formatNum(string.sub(num, 1, -5), flag) .. digitUnit[1] .. formatNum(string.sub(num, -4, -1), flag) + elseif lens < 13 then + result = formatNum(string.sub(num, 1, -9), flag) .. + digitUnit[2] .. + formatNum(string.sub(num, -8, -5), flag) .. digitUnit[1] .. formatNum(string.sub(num, -4, -1), flag) + else + result = "" + end + + result = result:gsub("^" .. wordFigure[1], "") + result = result:gsub(wordFigure[1] .. digitUnit[1], "") + result = result:gsub(wordFigure[1] .. digitUnit[2], "") + result = result:gsub(wordFigure[1] .. wordFigure[1], wordFigure[1]) + result = result:gsub(wordFigure[1] .. "$", "") + if lens > 4 then result = result:gsub("^" .. wordFigure[2] .. wordFigure[3], wordFigure[3]) end + if result ~= "" then result = result .. wordFigure[4] else result = "数值超限!" end return result end @@ -145,7 +140,7 @@ end local function number_translator(input, seg, env) -- 获取 recognizer/patterns/number 的第 2 个字符作为触发前缀 env.number_keyword = env.number_keyword or - env.engine.schema.config:get_string('recognizer/patterns/number'):sub(2, 2) + env.engine.schema.config:get_string('recognizer/patterns/number'):sub(2, 2) local str, num, numberPart if env.number_keyword ~= '' and input:sub(1, 1) == env.number_keyword then str = string.gsub(input, "^(%a+)", "")