Здравствуйте, гость ( Вход | Регистрация )

2 страниц V < 1 2  
Ответить в эту темуОткрыть новую тему
> Математические операции с плавающей точкой.
Fors1k
сообщение 27.6.2019, 22:36
Сообщение #21


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Цитата(FREEON @ 15.6.2019, 15:04) *

Задать бы как что бы после запятой или точки копировало 3 цифры.

Оставит после зяпятой нужное количество знаков.
Код
set #f 3 // здесь задать кол-во знаков после запятой
set %a math.dbl (12.1 / 3)
set $a %a[1]
set $a copy($a 1 eval(posex("," $a)+#f))
log $a
end_script


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 27.6.2019, 22:59
Сообщение #22


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Оставит после зяпятой нужное количество знаков, или вернёт целое число.
Код
set #f 3 // здесь задать кол-во знаков после запятой
set %a math.dbl (10 / 5)
set $a %a[1]
if frac($a) > 0
set $a copy($a 1 eval(posex("," $a)+#f))
else
set $a trunc($a)
end_if
log $a
end_script


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 28.6.2019, 0:58
Сообщение #23


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Пример
59,4/11+2,3*2
Код
set %a math.dbl (59.4 / 11)
  call r %a[1]
  set $a $r
set %b math.dbl (2.3 * 2)
  call r %b[1]
  set $b $r
set %c math.dbl ($a + $b)
  call r %c[1]
  set $c $r
log $c
end_script
proc r $x
set linedelay 1
set #f 3
if frac($x) > 0
   set $result copy($x 1 eval(posex("," $x)+#f))
else
   set $result trunc($x)
end_if
end_proc


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 7.7.2019, 4:02
Сообщение #24


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Цитата(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


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 24.7.2019, 3:20
Сообщение #25


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Ну наконец-то я придумал как это провернуть) (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 байт ) Кол-во скачиваний: 11
В пилоте кликнуть Скрипт->Открыть файл процедур..


P.S.
Если это возможно встроить в сам пилот в следующей версии, и зарезервировать команду, например : math $a 59.4 / 11, то было бы наверное совсем огонь.


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 24.7.2019, 12:56
Сообщение #26


*******

Adept
Сообщений: 1.083
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 12733
Пользователь №: 16.156



"...плакали, кололись, но продолжали грызть кактус."
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 24.7.2019, 14:40
Сообщение #27


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Цитата(Cockney @ 24.7.2019, 12:56) *

"...плакали, кололись, но продолжали грызть кактус."

У тебя вопрос какой-то есть, или предложение по теме ?


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.7.2019, 19:13
Сообщение #28


***********

Модератор UOPilot
Сообщений: 8.403
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 25833
Пользователь №: 11.279



Цитата
У тебя вопрос какой-то есть, или предложение по теме ?

Lua


--------------------
Скрипты под заказ.
Консультации по UOpilot через ICQ, Skype, Ventrilo, TeamSpeak, TeamViewer 700р/час.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 27.7.2019, 19:33
Сообщение #29


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Цитата(DarkMaster @ 27.7.2019, 19:13) *

Lua

Данный топик иммет какое-либо отношение к луа? Или нужно у Cockney спрашивать разрешение в каких топиках и о каких языках программирования мне общаться?
Я еще хочу дописать возможность делать сравнения a > b ; a < b ; a = b. Надеюсь он не будет против...(IMG:https://forum.uokit.com/style_emoticons/default/unsure.gif)


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 27.7.2019, 23:58
Сообщение #30


***********

Модератор UOPilot
Сообщений: 8.403
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 25833
Пользователь №: 11.279



Fors1k, не нужно воспринимать это так в штыки. Вы можете использовать любые языки, вам никто не запрещает и имелось ввиду совсем иное. Lua был встроен чтобы решить очень многие проблемы пилота в части скриптового движка - они были при этом решены. Вы по своим соображениям выбираете старый синтаксис, который не содержит этих решений. Это ваше право и никто его не отбирает, но со стороны возникают логичные вопросы о целесообразности данных действий и вам намекают, что возможно стоит перестать хвататься за старое, но столь привычное. Есть некоторые старые очень объемные вещи и у меня, которые я не готов переводить на луа, но каждый раз, когда нужно что-то там править для меня это целая беда . Присмотритесь, возможно пришло время и не более того.

Цитата
Я еще хочу дописать возможность делать сравнения a > b ; a < b ; a = b.

И я буду вам благодарен

Сообщение отредактировал DarkMaster - 28.7.2019, 0:01


--------------------
Скрипты под заказ.
Консультации по UOpilot через ICQ, Skype, Ventrilo, TeamSpeak, TeamViewer 700р/час.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 28.7.2019, 1:37
Сообщение #31


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



DarkMaster, премного благодарен за совет. Как видишь, человеческий подход встречает расположение у собеседника. А подача штыками, в штыки и воспринимается.
Цитата(DarkMaster @ 27.7.2019, 23:58) *

...со стороны возникают логичные вопросы о целесообразности данных действий...

Я с радостью отвечу на эти вопросы.
1. Пользователей, которые пишут на пилоте предостаточно, а значит для них данный вопрос является актуальным.
2. Так же немалая часть новичков выбирает пилот, по разным соображениям. Где-то недавно зашел разговор об этом, в котором Cirus логично предположил, что людей, далеких от программирования, вероятно пугает внешний вид луа. Кто-то и по другим причинам может продолжает выбирать пилот, я не знаю.
3. Как минимум это просто увлекательно, как максимум это опыт, который мне может пригодиться в других задачах.

Я готов бы может перейти на луа, но пока с пилотом я не испытывал каких-либо глобальных проблем, и не сталкивался с тем, что он чего-то не может. Как только такое произойдет, я с распростертыми объятиями осознанно приму луа:)


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 28.7.2019, 1:54
Сообщение #32


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Цитата(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 байт ) Кол-во скачиваний: 21
В пилоте кликнуть Скрипт->Открыть файл процедур..


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 2.8.2019, 0:23
Сообщение #33


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Добавил возможность через 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 килобайт ) Кол-во скачиваний: 27
В пилоте кликнуть Скрипт->Открыть файл процедур..


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 15.8.2019, 18:44
Сообщение #34


****

Apprentice
Сообщений: 212
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 1037
Пользователь №: 18.746
Возраст: 26



Добавил условие неравенства.

При повторном/многократном сравнении через одну и ту же переменную($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 килобайт ) Кол-во скачиваний: 41
В пилоте кликнуть Скрипт->Открыть файл процедур..


--------------------
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V < 1 2
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 21.11.2019, 11:32
Designed by Nickostyle