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))
Nikolay написал: Не заметил, что целое. Если известен 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 раза быстрее.
если надо целую и дробную часть, то так: 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
Nikolay написал: Не заметил, что целое. Если известен 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)