将英语数字转换为数字值(忽略小数)

问题描述 投票:4回答:6

我想将这些类型的值'300万','2.4万','35万'等转换为数字。在JavaScript(所以我可以在客户端)或PHP(服务器端)中使用。有这个功能吗?像PHP的strtotime()函数?

input                  output
3 million              3000000
24 thousand            24000
350 thousand           350000
javascript php converter
6个回答
3
投票

您是否也想将它们组合?

function convert(num) {
  function mapGroups(str) {
    if (/million/.test(str)) {
      return str.match(/\d+/)[0] * 1000000;
    }
    if (/thousand/.test(str)) {
      return str.match(/\d+/)[0] * 1000;
    }
    if (/hundred/.test(str)) {
      return str.match(/\d+/)[0] * 100;
    }
    return +str;
  }
  
  return num.match(/(\d+)( ?\w* ?)/g)
            .map(mapGroups)
            .reduce(function(p, c) { return p + c });
}

console.log(convert("3 million 240 thousand 7 hundred 54")) //3240754
console.log(convert("5 millions 7 hundreds 54")) //5000754

这是非常基本的,但是您一定会有所把握。


0
投票
    $str = str_replace('hundred','00',$str);
    $str = str_replace('thousand','000',$str);
    $str = str_replace('million','000000',$str);
    $str = str_replace('billion','000000000',$str);
$str = str_replace(' ','',$str);

类似:)


0
投票

没有奇迹解决方案,但NumberFormatter::parse PHP函数可以帮助您解决问题:

$fmt = numfmt_create('en_US', NumberFormatter::SPELLOUT);
echo numfmt_format($fmt, '1234567');

将输出一二十三万四千五百六十七]]和

$fmt = numfmt_create('en_US', NumberFormatter::SPELLOUT);
echo numfmt_parse($fmt, 'one million two hundred thirty-four thousand five hundred sixty-seven');

将输出1234567

不幸的是,这不适用于混合类型的值,例如“ 24 000”(需要完全拼写出来,但是您可以通过首先在字符串中拼写实际数字来提出解决方法。


0
投票

假设:


0
投票

我喜欢这样的问题,这是我在PHP中的尝试。我想使其尽可能紧凑,并且如果要使用thousandthsmillionths,它很容易扩展。


-1
投票

此示例用于将数字转换为单词,但是在许多情况下,只要将输入的单词与从数字转换为单词计算所得的值相匹配,就可以将单词转换为数字。

© www.soinside.com 2019 - 2024. All rights reserved.