Как я могу сделать математику со словами в JQuery? - PullRequest
7 голосов
/ 24 марта 2012

Я пытаюсь написать программу, которая может сделать математику с английскими словами.

Например, я хочу иметь возможность сделать что-то вроде

"four thousand and three" + "seven thousand and twenty nine" 

и получить вывод типа

"eleven thousand and thirty two"

Возможно ли это сделать в jQuery?

Ответы [ 3 ]

14 голосов
/ 24 марта 2012

Да, я написал плагин jQuery под названием Word Math , который был создан именно для этой цели.

Например, в своем вопросе вы можете просто скопировать и вставить этокод

alert($.wordMath("four thousand and three").add("seven thousand and twenty nine"));
//alerts "eleven thousand thirty two"

и вуаля!Вы выполнили какое-то слово math.

Word Math также может выполнять преобразование чисел Javascript в слова и наоборот:

$.wordMath.toString(65401.90332)
// sixty five thousand four hundred one and nine tenths and three thousandths and three ten thousandths and two hundred thousandths

$.wordMath("three million four hundred and sixty seven thousand five hundred and forty two").value
// 3467542

Вы можете прочитать больше о том, как использоватьПлагин Word Math на странице readme

EDIT: В настоящее время существует версия Word Math, которая не зависит от jQuery.Чтобы использовать его, вы должны загрузить файл wordMath.vanilla.min.js в репозиторий gitHub вместо файла wordMath.jquery.js.

Использование версии без jQuery точно такое же, как и у версии jQuery, за исключением того, что вы используетене нужен префикс $. в вызовах.Другими словами, вместо того, чтобы делать

$.wordMath("fifteen").add("eighteen")

, вы бы написали

wordMath("fifteen").add("eighteen")
3 голосов
/ 24 марта 2012

Вы можете использовать библиотеку, но если вы хотите написать свой собственный код, вы можете начать с чего-то вроде этого.

<script type="text/javascript">

var equation = "one plus two";
var arrayOfWords =  equation.split(" ");
var functionToEvaluate = "";

for(i in arrayOfWords){
    functionToEvaluate = functionToEvaluate + GetNumericOrSymbol(arrayOfWords[i]);
}

var answer = eval(functionToEvaluate);
alert(answer);
//Then your method GetNumericOrSymbol() could so something like this.

function GetNumericOrSymbol(word){
    var assocArray = new Array();
    assocArray['one'] = 1;
    assocArray['two'] = 2;

    //rest of the numbers to nine

    assocArray['plus']='+';

    //rest of your operators

    return assocArray[word];
}
</script>

Что-то вроде удаления массива из вызова функции поможет оптимизировать его.Было очень весело писать это.

2 голосов
/ 24 марта 2012

Как вы знаете, вы не можете выполнять математические операции над самими строками, поэтому вам нужно начать с преобразования текста в числовые значения.

После выполнения математических операций над числовыми значениями вы можетезначения возвращаются в строки и выводят результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...