Russian Qt Forum
Ноябрь 11, 2024, 01:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: ScriptEngine::evaluate("10*0.95") не вычисляется!!!  (Прочитано 8120 раз)
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
Записан
DpoHro
Гость
« Ответ #1 : Декабрь 08, 2007, 22:19 »

Возможно мелочь какая то, чтото в манах не дочитал, скорее всего ктото сталкивался...
Записан
Mikor
Гость
« Ответ #2 : Декабрь 08, 2007, 22:27 »

В 4.3.2 полно ошибок связанных с числами в QtScript. Сначала обнови до 4.3.3, может уже исправили...
Записан
DpoHro
Гость
« Ответ #3 : Декабрь 08, 2007, 22:30 »

не хотелось бы чтобы это была ошибка QtScript Грустный
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #4 : Декабрь 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()). А полученную строку в число.
Записан
Dodge
Гость
« Ответ #5 : Декабрь 08, 2007, 23:51 »

В 4.3.2 полно ошибок связанных с числами в QtScript. Сначала обнови до 4.3.3, может уже исправили...
Это простите называется - "Пукнуть мозгом".
Вы хоть 1 назвать сможете? ... я с модулем qtscript с 4.3.0 работаю, и каких либо замечаний по его работе, лично у меня не было.
Записан
DpoHro
Гость
« Ответ #6 : Декабрь 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"
Все вычисляется, но ясно что хотелось бы разобраться и написать все ПРАВИЛЬНО =)
Записан
Dodge
Гость
« Ответ #7 : Декабрь 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
Записан
Swappp
Гость
« Ответ #8 : Декабрь 09, 2007, 01:01 »

Я им не пользовался, но может проблема в локали? Для русской локали разделитель дробной и целой это ",", а для США и некоторых других ".". Но тут вопрос, как поступили троли? Если разделитель читается из локали, то получаются не переносимые скрипты, а если жестко точка, то могут быть проблемы с получением данных из строк, введенных пользователем...
Записан
DpoHro
Гость
« Ответ #9 : Декабрь 09, 2007, 01:22 »

Я естесственно пробую для отладки перевести в QString ...

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

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

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

Сообщений: 587


Просмотр профиля
« Ответ #10 : Декабрь 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.

Нормально работающий пример от разработчика. Работает и с целыми и с дробями.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.