Russian Qt Forum

Qt => Qt Script, QtWebKit => Тема начата: DpoHro от Декабрь 08, 2007, 22:15



Название: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: DpoHro от Декабрь 08, 2007, 22:15

Код:
QScriptValue res = qsEngine.evaluate("1400.0*0.95*1.3");

Чтото не пойму, целые числа если - то все нормально вычисляет, а с точкой - нифига...
Я гдето не дочитал в документации?

Если пишем:

Код:
res = qsEngine.evaluate("1499*3.14*1.5");

То результат получается 4497, то есть перемножилось 1499*3 до точки... Ничего не пойму...

Qt 4.3.2/Win32


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: DpoHro от Декабрь 08, 2007, 22:19
Возможно мелочь какая то, чтото в манах не дочитал, скорее всего ктото сталкивался...


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: Mikor от Декабрь 08, 2007, 22:27
В 4.3.2 полно ошибок связанных с числами в QtScript. Сначала обнови до 4.3.3, может уже исправили...


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: DpoHro от Декабрь 08, 2007, 22:30
не хотелось бы чтобы это была ошибка QtScript :(


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: Mikhail от Декабрь 08, 2007, 22:46

Код:
QScriptValue res = qsEngine.evaluate("1400.0*0.95*1.3");

Чтото не пойму, целые числа если - то все нормально вычисляет, а с точкой - нифига...
Я гдето не дочитал в документации?

Если пишем:

Код:
res = qsEngine.evaluate("1499*3.14*1.5");

То результат получается 4497, то есть перемножилось 1499*3 до точки... Ничего не пойму...

Qt 4.3.2/Win32

Посмотри пример qscript.
Работает все правильно.
Вся проблемма у тебя с преобразованием QScriptValue res.
Попробуй преобразовать в строку. (res.toString()). А полученную строку в число.


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: Dodge от Декабрь 08, 2007, 23:51
В 4.3.2 полно ошибок связанных с числами в QtScript. Сначала обнови до 4.3.3, может уже исправили...
Это простите называется - "Пукнуть мозгом".
Вы хоть 1 назвать сможете? ... я с модулем qtscript с 4.3.0 работаю, и каких либо замечаний по его работе, лично у меня не было.


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: DpoHro от Декабрь 09, 2007, 00:13
Я естесственно пробую для отладки перевести в QString, дабы посмотреть что там есть вообще. И результат там "0" если в строке перед первой точкой стоит 0
например такая строка "2000*0.95" отрабатывает с результатом 0
а вот такая "2000*3.14" с результатом "6000" то есть первая точка в строке и далее все откидывается и вычисляется что остается...
Сдается мне что это не с проста. Пробовал заменить все точки на запятые, предположил, что десятые отделяются запятой, результат "2000*3,14" = 14 то есть то что после запятой.

Сейчас сделал преобразование чисел в дробные, "2000*3.14" = "2000*(100*3+14)/100"
Все вычисляется, но ясно что хотелось бы разобраться и написать все ПРАВИЛЬНО =)


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: Dodge от Декабрь 09, 2007, 00:50
Я естесственно пробую для отладки перевести в QString, дабы посмотреть что там есть вообще. И результат там "0" если в строке перед первой точкой стоит 0
например такая строка "2000*0.95" отрабатывает с результатом 0
а вот такая "2000*3.14" с результатом "6000" то есть первая точка в строке и далее все откидывается и вычисляется что остается...
Сдается мне что это не с проста. Пробовал заменить все точки на запятые, предположил, что десятые отделяются запятой, результат "2000*3,14" = 14 то есть то что после запятой.

Сейчас сделал преобразование чисел в дробные, "2000*3.14" = "2000*(100*3+14)/100"
Все вычисляется, но ясно что хотелось бы разобраться и написать все ПРАВИЛЬНО =)

хы...похоже дело в этом, 2000 - целое. Попробуйте написать 2000.0*3.14


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: Swappp от Декабрь 09, 2007, 01:01
Я им не пользовался, но может проблема в локали? Для русской локали разделитель дробной и целой это ",", а для США и некоторых других ".". Но тут вопрос, как поступили троли? Если разделитель читается из локали, то получаются не переносимые скрипты, а если жестко точка, то могут быть проблемы с получением данных из строк, введенных пользователем...


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: DpoHro от Декабрь 09, 2007, 01:22
Я естесственно пробую для отладки перевести в QString ...

хы...похоже дело в этом, 2000 - целое. Попробуйте написать 2000.0*3.14
Пробовал, дело в том что... =)

Я им не пользовался, но может проблема в локали? Для русской локали разделитель дробной и целой это ",", а для США и некоторых других ".". Но тут вопрос, как поступили троли? Если разделитель читается из локали, то получаются не переносимые скрипты, а если жестко точка, то могут быть проблемы с получением данных из строк, введенных пользователем...

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


Название: Re: ScriptEngine::evaluate("10*0.95") не вычисляется!!!
Отправлено: Mikhail от Декабрь 09, 2007, 10:12

Код:
QScriptValue res = qsEngine.evaluate("1400.0*0.95*1.3");

Чтото не пойму, целые числа если - то все нормально вычисляет, а с точкой - нифига...
Я гдето не дочитал в документации?

Если пишем:

Код:
res = qsEngine.evaluate("1499*3.14*1.5");

То результат получается 4497, то есть перемножилось 1499*3 до точки... Ничего не пойму...

Qt 4.3.2/Win32

Посмотри пример qscript.
Работает все правильно.
Вся проблемма у тебя с преобразованием QScriptValue res.
Попробуй преобразовать в строку. (res.toString()). А полученную строку в число.


Еще раз настоятельно рекомендую посмотреть $(QTDIR)/examples/script/qscript.

Нормально работающий пример от разработчика. Работает и с целыми и с дробями.