我想将这些类型的值'300万','2.4万','35万'等转换为数字。在JavaScript(所以我可以在客户端)或PHP(服务器端)中使用。有这个功能吗?像PHP的strtotime()
函数?
input output
3 million 3000000
24 thousand 24000
350 thousand 350000
您是否也想将它们组合?
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
这是非常基本的,但是您一定会有所把握。
$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);
类似:)
没有奇迹解决方案,但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”(需要完全拼写出来,但是您可以通过首先在字符串中拼写实际数字来提出解决方法。
假设:
我喜欢这样的问题,这是我在PHP中的尝试。我想使其尽可能紧凑,并且如果要使用thousandths
或millionths
,它很容易扩展。
此示例用于将数字转换为单词,但是在许多情况下,只要将输入的单词与从数字转换为单词计算所得的值相匹配,就可以将单词转换为数字。