लुआ स्ट्रिंग टू इंट


182

मैं Lua में स्ट्रिंग को पूर्णांक में कैसे बदल सकता हूं?

मेरे पास एक स्ट्रिंग है जैसे:

a = "10"

मैं चाहूंगा कि इसे 10 में बदल दिया जाए, संख्या।


6
सटीक लिंक ज़बरदस्ती पर अनुभाग है: 5.1 , 5.2
lhf

5
@NicolBolas: +1 एक ऐसा प्रश्न पूछने के लिए जो पहला Google परिणाम है और एक सीधा-टू-द पॉइंट उत्तर प्रदान करता है।
१।

2
+1 इस काटने ट्रोल निकोल को क्षतिपूर्ति करने के लिए: D
Пет Пр Петров

Lua बस तार और संख्याओं के बीच स्वचालित रूप से रूपांतरण करता है। यदि आप प्रकार सुनिश्चित करना चाहते हैं, तो a = tonumber (a) का उपयोग करें।
xpol

जवाबों:


298

tonumberफ़ंक्शन का उपयोग करें । के रूप में a = tonumber("10")


4
Lua 5.3 में, (64-बिट डिफॉल्ट) पूर्णांकों के अनुसार इलाज किया जाता है ( lua.org/manual/5.3/manual.html ): "एक अंश स्थिरांक के साथ एक संख्यात्मक स्थिरांक या एक घातांक को दर्शाता है; अन्यथा यह पूर्णांक को दर्शाता है।"
केविन ली

33

आप अंकगणित के संचालन में एक स्ट्रिंग का उपयोग करके एक अंतर्निहित रूपांतरण को बाध्य कर सकते हैं a= "10" + 0, लेकिन यह स्पष्ट रूप से उपयोग करने के रूप में या के रूप में साफ नहीं है tonumber


2
नहीं, यह "10" को पूर्णांक में बदल देगा और फिर इसमें 0 जोड़ देगा। (स्पष्टता की कमी के tonumberबजाय उपयोग करने के लिए सभी अधिक कारण हैं , हालांकि!)
रेन

16
@ रीना, स्पष्टता में कोई कमी नहीं है। +हमेशा स्पष्ट रूप से इसके अतिरिक्त है, ..- संगति।
ओलेग वी। वोल्कोव

1
@ एलएफ: ऑटो कॉर्शन केवल नंबर पर काम करेगा। और तुलना ऑपरेटरों (== ~ = <> <=> =) अपने तर्कों को परिवर्तित नहीं करते हैं। और प्रदर्शन के कारणों से आपको बहुत अधिक स्वत: ज़बरदस्ती पर निर्भर होने से बचना चाहिए
सेशा

9
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))

उत्पादन

   string                                                                                                                                                                          
   number

8

Lua में सभी नंबर फ़्लोट हैं ( संपादित करें: Lua 5.2 या उससे कम)। यदि आप वास्तव में "इंट" में बदलना चाहते हैं (या कम से कम इस व्यवहार को दोहराते हैं), तो आप यह कर सकते हैं:

local function ToInteger(number)
    return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end

जिस स्थिति में आप स्पष्ट रूप से एक संख्या में स्ट्रिंग (या वास्तव में, जो कुछ भी है) को परिवर्तित करते हैं, और फिर जावा में एक (इंट) डाली की तरह संख्या को काटते हैं।

संपादित करें: यह अभी भी Lua 5.3 में काम करता है, यहां तक ​​कि सोचा कि Lua 5.3 में पूर्णांक के रूप में वास्तविक math.floor()पूर्णांक हैं, जबकि एक ऑपरेटर जैसे कि number // 1अभी भी एक फ्लोट होगा तो एक फ्लोट लौटेगा number


5

स्ट्रिंग जिसे आप संख्या में बदलना चाहते हैं, वह चर में है S

a=tonumber(S)

बशर्ते कि संख्याएँ हों और इसमें केवल संख्याएँ ही Sएक संख्या लौटाएंगी, लेकिन यदि कोई वर्ण हैं जो संख्याएँ नहीं हैं (फ़्लोट के लिए अवधि को छोड़कर) तो यह शून्य हो जाएगा


4

टोनर का उपयोग करने के लिए स्पष्ट विकल्प है ।

5.3.2 तक, यह फ़ंक्शन स्वचालित रूप से पूर्णांक का पता लगाएगा (हस्ताक्षरित), फ्लोट (यदि एक बिंदु मौजूद है) और हेक्साडेसिमल (दोनों पूर्णांक और फ्लोट, यदि स्ट्रिंग "0x" या "0X" से शुरू होती है)।

निम्नलिखित स्निपेट छोटे हैं, लेकिन समतुल्य नहीं हैं:

  • a + 0 -- forces the conversion into float, due to how + works.
  • a | 0 -- (| is the bitwise or) forces the conversion into integer. 
    -- However, unlike `math.tointeger`, it errors if it fails.

3

यह ध्यान दिया जाना चाहिए कि math.floor()हमेशा नीचे गोल होता है, और इसलिए नकारात्मक अस्थायी बिंदु मानों के लिए एक समझदार परिणाम नहीं देता है।

उदाहरण के लिए, -10.4 को एक पूर्णांक के रूप में दर्शाया जाता है, जो आमतौर पर या तो छोटा होता है या -10 तक गोल होता है। फिर भी math.floor () का परिणाम समान नहीं है:

math.floor(-10.4) => -11

प्रकार रूपांतरण के साथ छंटनी के लिए, निम्न सहायक कार्य करेगा:

function tointeger( x )
    num = tonumber( x )
    return num < 0 and math.ceil( num ) or math.floor( num )
end

संदर्भ: http://lua.2524044.n2.nabble.com/5-3-Converting-a-floating-point-number-to-integer-td7664081.html


2

आप "10" को इंट 10 के रूप में रखने के लिए एक सहायक बना सकते हैं।

उदाहरण:

x = tonumber("10")

यदि आप x चर को प्रिंट करते हैं, तो यह एक इंट 10 का उत्पादन करेगा और "10" नहीं

पायथन प्रक्रिया की तरह

x = int ("10")

धन्यवाद।


2

मैं हाइपरपॉलीग्लॉट की जाँच करने के लिए फिर से तैयार करूँगा, एक भयानक तुलना है: http://hyperpolyglot.org/

http://hyperpolyglot.org/more#str-to-num-note

ps। दरअसल लुआ डबल्स में नहीं बल्कि डबल्स में परिवर्तित हो जाता है।

संख्या प्रकार वास्तविक (डबल-सटीक फ़्लोटिंग-पॉइंट) संख्याओं का प्रतिनिधित्व करता है।

http://www.lua.org/pil/2.3.html


1

tonumber (e [, base])

tonumberदो तर्क लेता है, पहला है स्ट्रिंग जिसे संख्या में परिवर्तित किया जाता है और दूसरा आधार है e

रिटर्न वैल्यू tonumberबेस 10 में है।

यदि नहीं दिया गया baseहै तो यह संख्या को आधार 10 में परिवर्तित करता है।

> a = '101'
> tonumber(a)
101

यदि आधार प्रदान किया जाता है, तो वह इसे दिए गए आधार में बदल देता है।

> a = '101'
> 
> tonumber(a, 2)
5
> tonumber(a, 8)
65
> tonumber(a, 10)
101
> tonumber(a, 16)
257
> 

यदि eअमान्य वर्ण है, तो यह वापस आ जाता है nil

> --[[ Failed because base 2 numbers consist (0 and 1) --]]
> a = '112'
> tonumber(a, 2)
nil
> 
> --[[ similar to above one, this failed because --]]
> --[[ base 8 consist (0 - 7) --]]
> --[[ base 10 consist (0 - 9) --]]
> a = 'AB'
> tonumber(a, 8)
nil
> tonumber(a, 10)
nil
> tonumber(a, 16)
171

मैंने Lua5.3 पर विचार करते हुए उत्तर दिया


0
Lua 5.3.1  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> math.floor("10");
10
> tonumber("10");
10
> "10" + 0;
10.0
> "10" | 0;
10

-1

यहाँ आप को क्या करना चाहिए

local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)

output:

20

एक = टन कैलोरी (स्ट्रॉबेरी) पर्याप्त है
'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.