Module:Math/tonumber

Vikipediya, açıq ensiklopediya
Jump to navigation Jump to search

Çağırış funksiyaları

integer

{{#invoke:math/tonumber|integer|…}}

Sətirdə olan ilk müsbət tam ədədi qaytarır.

Giriş dəyəri Nəticə
2014 2014
[[2014]] 2014
[[2014-cü il|2014]] 2014
[[31 dekabr]] [[2014]] 31
F-15 15

Lazım olduqda şablonlarda istifadə olunur.

quantity

{{#invoke:math/tonumber|quantity|…}}

Sətirdən kəmiyyət dəyərini qaytarır.

Giriş dəyəri Nəticə
100 000 100000
100 min nəf. 100000
100,9 min nəf. 100900
100,90 min nəf. 100900
100,90 min nəf. (2017) 100900
100 000 ± 10 100000

Lazım olduqda şablonlarda istifadə olunur.

year

Sətirdə tapılan ilk 3- və ya 4-rəqəmli tam müsbət ədədi qaytarır.

{{#invoke:math/tonumber|year|…}}
{{#invoke:math/tonumber|year|…|default=…}}
Giriş dəyəri Nəticə
2014 2014
910 910
[[2014]] 2014
[[2014-cü il|2014]] 2014
[[31 dekabr]] [[2014]] 2014
F-15
[[e.ə 2316-cı il]] -2316
100,90 min nəf. (2017) 2017

Sınaqlar

1 tests failed.

test_integer:

Text Expected Actual
HəY {{ #invoke:Math/tonumber|integer | 2014 }} 2014 2014
HəY {{ #invoke:Math/tonumber|integer | 910 }} 910 910
HəY {{ #invoke:Math/tonumber|integer | 14 }} 14 14
HəY {{ #invoke:Math/tonumber|integer | 1 }} 1 1
HəY {{ #invoke:Math/tonumber|integer | -100 }} 100 100
HəY {{ #invoke:Math/tonumber|integer | [[2014]] }} 2014 2014
HəY {{ #invoke:Math/tonumber|integer | [[2014-cü il|2014]] }} 2014 2014
HəY {{ #invoke:Math/tonumber|integer | [[31 dekabr]] [[2014]] }} 31 31
HəY {{ #invoke:Math/tonumber|integer | [[e.ə 2316-cı il]] }} 2316 2316
HəY {{ #invoke:Math/tonumber|integer | 22 mart 14-cü il }} 22 22
HəY {{ #invoke:Math/tonumber|integer | F-15 }} 15 15

test_year:

Text Expected Actual
HəY {{ #invoke:Math/tonumber|year | 2014 }} 2014 2014
HəY {{ #invoke:Math/tonumber|year | 910 }} 910 910
HəY {{ #invoke:Math/tonumber|year | 14 }} 14 14
HəY {{ #invoke:Math/tonumber|year | 1 }} 1 1
YoxN {{ #invoke:Math/tonumber|year | -100 }} 100
HəY {{ #invoke:Math/tonumber|year | e.ə 10 }} -10 -10
HəY {{ #invoke:Math/tonumber|year | [[e.ə 10]] }} -10 -10
HəY {{ #invoke:Math/tonumber|year | [[2014]] }} 2014 2014
HəY {{ #invoke:Math/tonumber|year | [[2014-cü il|2014]] }} 2014 2014
HəY {{ #invoke:Math/tonumber|year | [[31 dekabr]] [[2014]] }} 2014 2014
HəY {{ #invoke:Math/tonumber|year | [[e.ə 2316-cı il]] }} -2316 -2316
HəY {{ #invoke:Math/tonumber|year | 22 mart 14-cü il }}
HəY {{ #invoke:Math/tonumber|year | F-15 }}



--[[

This module convert strings to numbers.

]]
local p = {}

-- Get first integer number from string.
function p.integer( frame )
    local s = frame.args[1]

	s = string.gsub( s, '<[^<>]+>', '' ) -- strip HTML tags
    s = string.gsub( s, '[^0-9]', ' ' )
    s = mw.text.trim( s )
    s = mw.text.split( s, ' ' )[1]
    
    return tonumber( s )
end

-- Get number from quantity (e.g. from Wikidata).
function p.quantity( frame )
	local s = frame.args[1]

	s = string.gsub( s, '<[^<>]+>', '' ) -- strip HTML tags
    s = string.gsub( s, ' ', '' )

    s = string.gsub( s, 'min', '000' )
    s = string.gsub( s, 'mln', '000000' )
    s = string.gsub( s, 'mlrd', '000000000' )

    s = string.gsub( s, ',(%d%d%d)000', '%1' )
    s = string.gsub( s, ',(%d%d)000', '%10' )
    s = string.gsub( s, ',(%d)000', '%100' )

    s = string.gsub( s, '±.*$', '' )

    s = string.gsub( s, '[^0-9]', ' ' )
    s = mw.text.trim( s )

    s = mw.text.split( s, ' ' )[1]

    return tonumber( s )
end

-- Get year value from string.
function p.year( frame )
    local n = nil
    local cat = frame.args['cat']

	-- 'году' or 'года'
    local yearForm = 'il'
    if frame.args['form'] and frame.args['form'] ~= '' then
    	yearForm = frame.args['form']
	end

    local s = frame.args[1]
	s = string.gsub( s, '<[^<>]+>', '' ) -- strip HTML tags

    local isBce = string.match( s, 'e.ə' )
    s = string.gsub( s, 'e.ə', '' )
    s = string.gsub( s, 'e.ə', '' )

	-- Get first 3- or 4-digit integer number from string.
    local sParts = string.gsub( s, '[^0-9]', ' ' )
    sParts = mw.text.trim( sParts )
    sParts = mw.text.split( sParts, ' +' )
    for k = #sParts, 1, -1 do
	    v = sParts[k]
        if string.match( v, '^[12]%d%d%d$' ) then
            n = tonumber( v )
            break
        end
	end

	-- The entire string is a number.
	if not n then
	    s = string.gsub( s, '[%[%]]', '' )
	    s = mw.text.trim( s )
		if string.match( s, '^%d%d?%d?%d?$' ) then
			n = tonumber( s )
		end
	end

	-- Generate category
	if n then
	    if isBce then
	    	if cat then
	    		return '[[К:' .. cat .. ' e.ə ' .. n .. ' ' .. yearForm .. ' ]]'
	    	end
	    	n = -n
	    else
	    	if cat then 
	    		return '[[К:' .. cat .. ' ' .. n .. ' ' .. yearForm .. ']]'
	    	end
	    end
	end

    return n or frame.args['default']
end

return p