You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在Blockly实现英文数字转阿拉伯数字(支持大数及两位小数)

用Blockly实现英文数字转阿拉伯数字(支持小数)

一、核心逻辑拆解

把输入的英文数字拆成整数部分和小数部分分别处理,最后合并结果:

  • 整数部分按「million(百万)、thousand(千)、hundred(百)」的层级拆分计算
  • 小数部分直接转成两位数字后除以100,得到对应小数

二、新手友好的Blockly配置步骤

1. 准备基础组件

  • 从「文本」分类拖出文本输入块,用来让用户输入英文数字(比如four thousand three hundred twenty seven point five six)
  • 从「变量」分类点击「创建变量」,添加三个变量:总数值、整数部分值、小数部分值

2. 拆分输入文本

  • 用「文本」分类的拆分文本块,把输入文本按point拆分,得到两个片段:
    • 第一个片段是整数部分的英文,赋值给临时变量整数文本
    • 第二个片段是小数部分的英文(如果没有小数则为空),赋值给临时变量小数文本

3. 整数部分转换(核心)

整数部分需要处理不同量级的单位,用嵌套判断和计算块实现:

  • 先做一个「基础数字映射」:用如果-那么块判断,比如输入one返回1,twenty five返回25,覆盖0到99的所有英文表述
  • 处理hundred:比如three hundred forty five → (基础映射(three) * 100) + 基础映射(forty five)
  • 处理thousand:把文本按thousand拆分,前半部分数值×1000,加上后半部分的数值(比如four thousand three hundred twenty seven → 基础组(four)*1000 + 基础组(three hundred twenty seven))
  • 处理million:同理,前半部分数值×1000000,加上后半部分的数值
  • 把最终计算结果赋值给整数部分值

4. 小数部分转换

  • 用如果-那么块判断:如果小数文本不为空,就把它转成基础数字(比如five six转成56),再除以100得到0.56,赋值给小数部分值;如果为空,小数部分值设为0

5. 合并并输出结果

  • 用数学计算块把整数部分值加小数部分值,赋值给总数值
  • 从「输出」分类拖出输出块,把总数值放进去,运行后就能看到对应的阿拉伯数字

三、偷懒的快速实现(用现成代码块)

如果不想拼复杂的判断块,直接用Blockly的「高级」分类里的运行JavaScript块,复制粘贴以下代码:

function textToNumber(text) {
  const numMap = {
    zero:0,one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9,
    ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,
    seventeen:17,eighteen:18,nineteen:19,twenty:20,thirty:30,forty:40,fifty:50,
    sixty:60,seventy:70,eighty:80,ninety:90,hundred:100,thousand:1000,million:1000000
  };
  const parts = text.toLowerCase().split('point');
  const intText = parts[0].trim();
  const decText = parts.length>1 ? parts[1].trim() : '';

  // 计算整数部分
  let intVal = 0;
  let current = 0;
  intText.split(' ').forEach(word => {
    if(word === 'hundred'){
      current *= numMap[word];
      intVal += current;
      current = 0;
    }else if(word === 'thousand'){
      current += intVal;
      intVal = current * numMap[word];
      current = 0;
    }else if(word === 'million'){
      current += intVal;
      intVal = current * numMap[word];
      current = 0;
    }else{
      current += numMap[word];
    }
  });
  intVal += current;

  // 计算小数部分
  let decVal = 0;
  if(decText){
    decText.split(' ').forEach(word => {
      decVal = decVal *10 + numMap[word];
    });
    decVal /= 100;
  }

  return intVal + decVal;
}

// 把下面的字符串换成你的文本输入块输出
const input = "four thousand three hundred twenty seven point five six";
const result = textToNumber(input);
console.log(result);
  • 把代码里的input替换成之前的文本输入块,再用输出块打印result即可

四、测试案例

  • 输入:four thousand three hundred twenty seven → 输出:4327
  • 输入:one million two hundred thirty four thousand five hundred sixty seven point eight nine → 输出:1234567.89
  • 输入:nine hundred ninety nine million nine hundred ninety nine thousand nine hundred ninety nine point nine nine → 输出:999999999.99

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:26:06