Как получить 2 целых числа отдельно до и после точки
Пользователь
Сообщений: Регистрация: 07.12.2020
Трейдер
18.07.2022 15:24:21
например есть число 1.3 надо получить число до точки и второе число после точки
Пользователь
Сообщений: Регистрация: 07.12.2020
Трейдер
18.07.2022 15:49:24
нашел
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
18.07.2022 16:13:03
Код
function GetPair(x)
local s = tostring(x)
s = s:sub(s:find (".")+2, 15)
if s == "" then
s = 0
end
return math.floor(x), tonumber(s)
end
print(GetPair(5.6))
print(GetPair(5.9999999))
print(GetPair(6))
Пользователь
Сообщений: Регистрация: 27.01.2017
18.07.2022 16:28:00
на самом деле math.modf
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
18.07.2022 18:02:49
Nikolay, Эта функция не возвращает 2 целых числа, как в вопросе указано. Хотя, конечно, на её основе сделать тоже можно, хорошая подсказка
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 19:06:06
например есть число x=1.3 z,e=math.modf (x) print(z,e) ------------------ результат: 1 0.3
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 19:07:56
если "0." мешают, просто удалите 2 первых символа из стори
Пользователь
Сообщений: Регистрация: 30.01.2015
18.07.2022 19:08:14
из строки
Пользователь
Сообщений: Регистрация: 27.01.2017
18.07.2022 19:14:57
Не заметил, что целое. Если известен scale, то умножить на 10 в степени.
Или можно воспользоваться магией динамической
tonumber(tostring(3.12459):match("%.(%d+)")) or 0
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 08:38:37
Цитата
Nikolay написал: Не заметил, что целое. Если известен scale, то умножить на 10 в степени.
Или можно воспользоваться магией динамической
tonumber(tostring(3.12459):match("%.(%d+)")) or 0
Почему не сделать просто? a,b=string.match(123.456,"(%d+)%.?(%d*)")
Впрочем, интересно, а в курсе ли уважаемый топикстартер, что 1.2 и 1.02 дадут одинаковый результат?
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:11:49
Цитата
написал:
Цитата
написал: Не заметил, что целое. Если известен scale, то умножить на 10 в степени.
Или можно воспользоваться магией динамической
tonumber(tostring(3.12459):match("%.(%d+)")) or 0
Почему не сделать просто? a,b=string.match(123.456,"(%d+)%.?(%d*)")
Впрочем, интересно, а в курсе ли уважаемый топикстартер, что 1.2 и 1.02 дадут одинаковый результат?
если надо быстрее, то так: x1,x2,a,b=string.find(x,"(%d+)%.?(%d*)") ================== сравним: local x=123.456 nkarray.start() local a,b=string.match(x,"(%d+)%.?(%d*)") local u=0.1* nkarray.stop() print(a,b,u)
nkarray.start() x1,x2,a,b=string.find(x,"(%d+)%.?(%d*)") local u=0.1*nkarray.stop() print(a,b,u) =================== результат (мкс): 123 456 8.6 123 456 1.8 ================== вариант с find в 4 раза быстрее.
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:15:30
если надо целую и дробную часть, то так: local x=123.456 local a,b=math.modf (x) local u=0.1*nkarray.stop() print(a,b,u) ------------------------- результат (мкс): 123 0.456 0.6 ================ в 12 раз быстрее, чем с match и в 3 раза быстрее чем с find
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:16:38
local x=123.456 nkarray.start() local a,b=math.modf (x) local u=0.1*nkarray.stop() print(a,b,u)
Пользователь
Сообщений: Регистрация: 30.01.2015
19.07.2022 09:32:09
Цитата
написал:
Цитата
написал: Не заметил, что целое. Если известен scale, то умножить на 10 в степени.
Или можно воспользоваться магией динамической
tonumber(tostring(3.12459):match("%.(%d+)")) or 0
Почему не сделать просто? a,b=string.match(123.456,"(%d+)%.?(%d*)")
Впрочем, интересно, а в курсе ли уважаемый топикстартер, что 1.2 и 1.02 дадут одинаковый результат?
еще один вариант и в итоге все варианты : -----------
Код
local x=123.456
local s=tostring(x);
nkarray.start()
local a,b=math.modf (x)
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local a,b=string.match(s,"(%d+)%.?(%d*)")
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
x1,x2,a,b=string.find(s,"(%d+)%.?(%d*)")
--local a=string.sub(x,1,m-1);
--local b=string.sub(x,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local m=string.find(s,".",1,true)
local a=string.sub(s,1,m-1);
local b=string.sub(s,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)
с учетом преобразования числа в строку получим следующее
Код
local x=123.456
nkarray.start()
local a,b=math.modf (x)
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local s=tostring(x);
local a,b=string.match(s,"(%d+)%.?(%d*)")
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local s=tostring(x);
x1,x2,a,b=string.find(s,"(%d+)%.?(%d*)")
--local a=string.sub(x,1,m-1);
--local b=string.sub(x,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)
nkarray.start()
local s=tostring(x);
local m=string.find(s,".",1,true)
local a=string.sub(s,1,m-1);
local b=string.sub(s,m+1);
local u=0.1*nkarray.stop()
print(a,b,u)