|
Математические операции с плавающей точкой. |
|
|
Fors1k |
7.7.2019, 4:02
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1713
Пользователь №: 18.746
|
Цитата(FREEON @ 15.6.2019, 15:04) Нельзя ли отбросить лишнее отображение ок и третей строки? Как округлить до тысячных или до сотых или десятых если на конце 0.
Код самого округления сокращен до 1 строки. Отбрасываются все нули в конце. Пример результата: Код 3,000000 = 3 3,007000 = 3,007 3,373000 = 3,373 3,333333 = 3,333333 Пример кода: Код set $a math.dbl (59.4 / 11) call m $a set $a $m set $b math.dbl (2.202 * 2) call m $b set $b $m set $c math.dbl ($a + $b) call m $c set $c $m log $c end_script proc m $x set #n regexp (#p $result $x (\d+?(?=,0+\b)|\d+[,.]\d+?(?=0+\b)|\d+[,.]\d+)) end_proc
--------------------
Для связи
|
|
|
|
Fors1k |
24.7.2019, 3:20
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1713
Пользователь №: 18.746
|
Ну наконец-то я придумал как это провернуть) (IMG: https://forum.uokit.com/style_emoticons/default/shtanga.gif) Итак, для всех, кто мечтал об операциях с дробными числами в одну строку кода, как например: set $a 59.4 / 11 и в переменной $a сразу был бы ответ 5,4 ( без массивов, выбора в нем первой строки, лишних нулей в конце и т.д. ). ...................................................... call m $var <arg1> <sign> <arg2>...................................................... call m $a 59.4 / 11 В переменной $a сразу будет ответ 5,4 . Так же будет проверяться корректность операции. В примере ниже три математические операции с плавающей точкой в трех строках. Код call m $a 59.4 / 11 call m $b 2.202 * 2 call m $c $a + $b log Ответ: $c end_script
При повторном/многократном использовании одной и той же переменной, которая получает результат, следует использовать запись: call m "$var" <arg1> <sign> <arg2> . Код call m $a 59.4 / 11 call m "$a" 2.202 * 2 log Ответ: $a end_script
Совет:
Для использования нужно скачать файл.
math.txt ( 467 байт )
Кол-во скачиваний: 1057В пилоте кликнуть Скрипт->Открыть файл процедур.. Сообщение отредактировал Fors1k - 14.6.2020, 1:25
--------------------
Для связи
|
|
|
|
DarkMaster |
27.7.2019, 23:58
|
Модератор UOPilot
Сообщений: 9.570
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 28534
Пользователь №: 11.279
|
Fors1k, не нужно воспринимать это так в штыки. Вы можете использовать любые языки, вам никто не запрещает и имелось ввиду совсем иное. Lua был встроен чтобы решить очень многие проблемы пилота в части скриптового движка - они были при этом решены. Вы по своим соображениям выбираете старый синтаксис, который не содержит этих решений. Это ваше право и никто его не отбирает, но со стороны возникают логичные вопросы о целесообразности данных действий и вам намекают, что возможно стоит перестать хвататься за старое, но столь привычное. Есть некоторые старые очень объемные вещи и у меня, которые я не готов переводить на луа, но каждый раз, когда нужно что-то там править для меня это целая беда . Присмотритесь, возможно пришло время и не более того. Цитата Я еще хочу дописать возможность делать сравнения a > b ; a < b ; a = b. И я буду вам благодарен Сообщение отредактировал DarkMaster - 28.7.2019, 0:01
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Fors1k |
28.7.2019, 1:54
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1713
Пользователь №: 18.746
|
Цитата(DarkMaster @ 27.7.2019, 23:58) Цитата Я еще хочу дописать возможность делать сравнения a > b ; a < b ; a = b. И я буду вам благодарен Вроде доделал. ...................................................... call m $var <arg1> <sign> <arg2> if $var ... end_if...................................................... При повторном/многократном сравнении через одну и ту же переменную($if) следует использовать запись: call m "$var" <arg1> ? <arg2> .Код call m $a 5.409 * 2.7 log $a call m $if $a > 10.25 if $if log Yes else log No end_if end_script
Совет:
Для использования нужно скачать файл.
math.txt ( 1004 байт )
Кол-во скачиваний: 3993В пилоте кликнуть Скрипт->Открыть файл процедур..
--------------------
Для связи
|
|
|
|
Fors1k |
2.8.2019, 0:23
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1713
Пользователь №: 18.746
|
Добавил возможность через switch сделать ветвление по условиям > ; < ; =. ...................................................... call m $var <arg1> ? <arg2>...................................................... При повторном/многократном сравнении через одну и ту же переменную($sw) следует использовать запись: call m "$var" <arg1> ? <arg2> .Пример. Допустим, нам нужно скопирвать число, и сделать одно из трех действий, в зависимости от его отношения к другому числу. Код double_kleft x y get clipboard $a
call m $sw $a ? 114.58 switch $sw case > log arg1 больше break case < log arg1 меньше break case = log arg1 и arg2 равны break end_switch End_script Совет:
Для использования нужно скачать файл.
math.txt ( 1,21 килобайт )
Кол-во скачиваний: 3858В пилоте кликнуть Скрипт->Открыть файл процедур..
--------------------
Для связи
|
|
|
|
Fors1k |
15.8.2019, 18:44
|
Journeyman
Сообщений: 497
Регистрация: 19.12.2017 Группа: Пользователи Наличность: 1713
Пользователь №: 18.746
|
Добавил условие неравенства. При повторном/многократном сравнении через одну и ту же переменную($if) следует использовать запись: call m "$var" <arg1> <sign> <arg2> . Код call m $a 5.505 * 2 log $a call m $if $a != 11.01 if $if log Yes else log No end_if end_script Совет:
Для использования нужно скачать файл.
math.txt ( 1,34 килобайт )
Кол-во скачиваний: 4873В пилоте кликнуть Скрипт->Открыть файл процедур..
--------------------
Для связи
|
|
|
|
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|