Как обрезать число типа float до 2х знаков после запятой

Страницы: 1
RSS
Как обрезать число типа float до 2х знаков после запятой
 
Добрый день

Подскажите как обрезать число типа float до 2х знаков после запятой
SetSell пишет в таблицу число вот такое 1,1124432871741  и тп...
надо обрезать до 2х знаков после запятой
в библиотеке math ничего не нашел
 
умножить на 100, округлить до целого, и разделить обратно :)
 
Логично )
 
string.sub(Название переменной,1,3) 1 - с первого символа и до 3 т.к. 2 знака после запятой..
 
лучше так:
x=1.1124432871741
y=string.sub(x,1,string.find(x,'.')+3)
print(y)
-------
1.11
 
или так
z=0.01*math.floor(100*x)
print(z)
----------------
1.11
 

Код
function round(num, idp)
  local mult = 10^(idp or 0)
  return math.floor(num * mult + 0.5) / mult
end
или вариант:
Код
function round2(num, idp)
  return tonumber(string.format("%." .. (idp or 0) .. "f", num))
end
пример:
Код
> function test(a, b) print(round(a,b), round2(a,b)) end
> test(43245325.9995, 3)
43245326        43245325.999
> test(43245325.9994, 3)
43245325.999    43245325.999
> test(43245325.5543654)
43245326        43245326
> test(43245325.5543654, 3)
43245325.554    43245325.554
> test(43245325.5543654, 4)
43245325.5544   43245325.5544
источник:
lua-users.org
 
все значительно проще
Код
 f3:write("\tПрибыль в %: "..vr7);
Прибыль в %: 16.504854368932
Код
 f3:write("\tПрибыль в %: "..string.format("%.2f",vr7));
Прибыль в %: 16.50
человек (не робот)
 
Цитата
Владимир Ишанин написал:
string.sub(Название переменной,1,3) 1 - с первого символа и до 3 т.к. 2 знака после запятой..
Владимир, спасибо! Как раз то, что искал.))
 
Цитата
Алексей А. написал:
Цитата
Владимир Ишанин написал:
string.sub(Название переменной,1,3) 1 - с первого символа и до 3 т.к. 2 знака после запятой..
Владимир, спасибо! Как раз то, что искал.))
прикольно, а если будет не 1, а 10 или 100, то сколько знаков будете отделять таким способом?
 
10 или 100 чего будет?
 
Цитата
Алексей А. написал:
10 или 100 чего будет?
Если Вы будете обрезать строку,
string.sub(Название переменной,1,3)
то Вам надо определять сколько позиций в целой части т е сначала найти позицию десятичной точки,
потом вычислить с какой по какую позицию выделить подстроку.
т е эта формула работает лишь тогда когда у вас число меньше 2, а если 10 или 100 то она не работает, надо изменять последнюю цифру.
----------------------
Поэтому универсально работает это:
y=string.sub(x,1,string.find(x,'.')+3)  -- следующая строка после сообщения Владимира.
 
и еще
округлять число через строку - это медленное  решение.
быстрым решением является округление через функцию
пример для сравнения быстродействия:
Код
x=1.112443287174
startA();  z=0.01*math.floor(100*x)            print("t(мкс)="..0.1*stopA()..",z="..z)
startA();  y=string.sub(x,1,string.find(x,'.')+3) print("t(мкс)="..0.1*stopA()..",y="..y)
результат:
Код
D:/lua53/lua53.exe -e "io.stdout:setvbuf 'no'" "nkAI.lua" 
t(мкс)=1.0,z=1.11
t(мкс)=6.2,y=1.11
>Exit code: 0
 
Цитата
nikolz написал:
если 10 или 100 то она не работает, надо изменять последнюю цифру.
Правильно, последнюю цифру меняю в зависимости от количества символов.
string.sub(Название переменной,1,3) - оставляет 3 символа, начиная с 1-го слева, включая запятую (точку).
string.sub(Название переменной,1,5) - оставляет 5 символов, начиная с 1-го слева, включая запятую (точку).

Спасибо за y=string.sub(x,1,string.find(x,'.')+3).
 
Цитата
nikolz написал:
через строку - это медленное  решение
Согласен.

Поэтому позже нашел такое решение: NewStopPrice = PriceC * 1.01 - PriceC * 1.01%0.01.
Вот отсюда: https://bot4sale.ru/blog-menu/qlua/512-floor-to-step.html
 
Цитата
Согласен.

Поэтому позже нашел такое решение: NewStopPrice = PriceC * 1.01 - PriceC * 1.01%0.01.
Вот отсюда:  https://bot4sale.ru/blog-menu/qlua/512-floor-to-step.html
Стоит помнить о вычислениях с плавающей запятой. Такой подход может дать неожиданный сюрприз.
 
Цитата
Nikolay написал:
Стоит помнить о вычислениях с плавающей запятой.
Спасибо за уточнение!
 
Цитата
Алексей А. написал:
Цитата
nikolz написал:
через строку - это медленное  решение
Согласен.

Поэтому позже нашел такое решение: NewStopPrice = PriceC * 1.01 - PriceC * 1.01%0.01.
Вот отсюда:  https://bot4sale.ru/blog-menu/qlua/512-floor-to-step.html
Согласен.
Можно из числа вычесть остаток от деления нацело.
Относительно побочных эффектов сказать ничего не могу.
 
В документации Lua5.1  указано, что a % b == a - math.floor(a/b)*b
---------------------
отсюда  получаем   math.floor(a/b)*b=a - a%b
------------------------
очевидно Михаил, с сайта которого Вы списали формулу ,
просто взял эту формулу из документации на луа и выдал за собственное открытие.
Страницы: 1
Читают тему
Наверх