57 lines
1.7 KiB
Lua
57 lines
1.7 KiB
Lua
local lovely = require("lovely")
|
|
local nativefs = require("nativefs")
|
|
Notation = nativefs.load(lovely.mod_dir.."/Talisman/big-num/notations/notation.lua")()
|
|
BaseStandardNotation = {}
|
|
BaseStandardNotation.__index = BaseStandardNotation
|
|
BaseStandardNotation.__tostring = function (notation)
|
|
return "BaseStandardNotation"
|
|
end
|
|
setmetatable(BaseStandardNotation, Notation)
|
|
|
|
function BaseStandardNotation:new(opt)
|
|
opt = opt or {}
|
|
return setmetatable({
|
|
start = opt.start,
|
|
ones = opt.ones,
|
|
tens = opt.tens,
|
|
hundreds = opt.hundreds,
|
|
dynamic = opt.dynamic,
|
|
reversed = opt.reversed
|
|
}, BaseStandardNotation)
|
|
end
|
|
|
|
function BaseStandardNotation:get_number_name(e)
|
|
if e >= 3003 then
|
|
local order_m = math.floor(e / 3000)
|
|
return string.format("[%d]-MI-", order_m) .. self:get_number_name(e - 3000 * order_m)
|
|
end
|
|
|
|
local order = math.floor(e / 3)
|
|
|
|
if order < #self.start then
|
|
return self.start[1 + order]
|
|
end
|
|
|
|
order = order - 1
|
|
local order_ten = math.floor(order / #self.ones)
|
|
local order_hundred = math.floor(order_ten / #self.tens)
|
|
|
|
return self.hundreds[1 + order_hundred % #self.hundreds] ..
|
|
self.ones[1 + order % #self.ones] ..
|
|
self.tens[1 + order_ten % #self.tens]
|
|
end
|
|
|
|
function BaseStandardNotation:get_number(n, places)
|
|
local num = n.m * 10 ^ (n.e % 3)
|
|
return Notation.format_mantissa(num, places)
|
|
end
|
|
|
|
function BaseStandardNotation:get_prefix(n)
|
|
if self.reversed then return self:get_number_name(n.e) else return "" end
|
|
end
|
|
|
|
function BaseStandardNotation:get_suffix(n)
|
|
if not self.reversed then return self:get_number_name(n.e) else return "" end
|
|
end
|
|
|
|
return BaseStandardNotation |