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

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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Оставит после зяпятой нужное количество знаков, или вернёт целое число.
Код
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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Пример
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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 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


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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 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 байт ) Кол-во скачиваний: 911
В пилоте кликнуть Скрипт->Открыть файл процедур..


Сообщение отредактировал Fors1k - 14.6.2020, 1:25


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


********

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



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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



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

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

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


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


***********

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



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

Lua


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 27.7.2019, 19:33
Сообщение #29


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(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
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



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

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

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

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


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 28.7.2019, 1:54
Сообщение #31


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 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 байт ) Кол-во скачиваний: 2704
В пилоте кликнуть Скрипт->Открыть файл процедур..


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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 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 килобайт ) Кол-во скачиваний: 2632
В пилоте кликнуть Скрипт->Открыть файл процедур..


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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 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 килобайт ) Кол-во скачиваний: 3302
В пилоте кликнуть Скрипт->Открыть файл процедур..


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
minfin
сообщение 27.11.2019, 8:00
Сообщение #34


*

Registred
Сообщений: 9
Регистрация: 26.1.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.206
Возраст: 29



ВАХ, спасибо БОЛЬШОЕ, Форсик.

трое суток учил Lua. = ото уж точно "продолжали грызть кактус"

список функций не полный. всё-равно костыль на костыле. не понятный скрипт в непонятном скрипте.

уже даже задумывался передавать через пилот в SQL, от туда считать через php.

и даже не думал что решится так просто.

U MAKE MY DAY.

позволь угостить тебя хорошим чаем. скинь реквы в личку.

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


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(minfin @ 27.11.2019, 8:00) *

ВАХ, спасибо БОЛЬШОЕ, Форсик.

U MAKE MY DAY.

minfin, рад, что тебе это облегчило жизнь, и благодарю за столь лестные слова в адрес моих трудов;))



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

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

 

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