ฉันจะแปลงสตริงเป็นจำนวนเต็มใน Lua ได้อย่างไร
ฉันมีสตริงเช่นนี้:
a = "10"
ฉันต้องการให้แปลงเป็น 10 จำนวน
ฉันจะแปลงสตริงเป็นจำนวนเต็มใน Lua ได้อย่างไร
ฉันมีสตริงเช่นนี้:
a = "10"
ฉันต้องการให้แปลงเป็น 10 จำนวน
คำตอบ:
ใช้ฟังก์ชั่นtonumber
a = tonumber("10")
ในฐานะที่เป็น
คุณสามารถบังคับให้มีการแปลงโดยนัยโดยใช้สตริงในการดำเนินการทางคณิตศาสตร์เช่นเดียวกับในa= "10" + 0
แต่ไม่ชัดเจนหรือสะอาดเท่าการใช้tonumber
อย่างชัดเจน
tonumber
แทน!)
+
จะเพิ่มอย่างชัดเจนเสมอ..
- การต่อข้อมูล
local a = "10"
print(type(a))
local num = tonumber(a)
print(type(num))
เอาท์พุต
string
number
ตัวเลขทั้งหมดใน Lua เป็นแบบลอย ( แก้ไข: Lua 5.2 หรือน้อยกว่า) หากคุณต้องการแปลงเป็น "int" (หรือทำซ้ำพฤติกรรมนี้อย่างน้อยที่สุด) คุณสามารถทำได้ดังนี้:
local function ToInteger(number)
return math.floor(tonumber(number) or error("Could not cast '" .. tostring(number) .. "' to number.'"))
end
ในกรณีที่คุณแปลงสตริง (หรือจริงๆแล้วไม่ว่าจะเป็นอะไรก็ตาม) ให้เป็นตัวเลขอย่างชัดเจนแล้วตัดทอนหมายเลขที่มีลักษณะคล้าย (int) ที่ใช้ใน Java
แก้ไข:ยังใช้งานได้ใน Lua 5.3 แม้จะคิดว่า Lua 5.3 มีจำนวนเต็มจริงเช่นเดียวกับmath.floor()
ส่งคืนจำนวนเต็มในขณะที่โอเปอเรเตอร์เช่นnumber // 1
จะยังคงส่งคืน float ถ้าnumber
เป็น float
พูดว่าสตริงที่คุณต้องการเปลี่ยนเป็นตัวเลขอยู่ในตัวแปร S
a=tonumber(S)
โดยมีตัวเลขและมีเพียงตัวเลขเท่านั้นที่S
จะส่งกลับตัวเลข แต่ถ้ามีอักขระใด ๆ ที่ไม่ใช่ตัวเลข (ยกเว้นช่วงเวลาสำหรับการลอย) มันจะคืนค่าศูนย์
ตัวเลือกที่ชัดเจนคือการใช้tonumber
ตั้งแต่ 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.
ควรสังเกตว่า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
คุณสามารถสร้าง accessor เพื่อให้ "10" เป็น int 10 ได้
ตัวอย่าง:
x = tonumber("10")
ถ้าคุณพิมพ์ตัวแปร x มันจะออก int 10 และไม่ใช่ "10"
เหมือนกับกระบวนการ Python
x = int ("10")
ขอบคุณ
ฉันขอแนะนำให้ตรวจสอบ Hyperpolyglot มีการเปรียบเทียบที่ยอดเยี่ยม: http://hyperpolyglot.org/
http://hyperpolyglot.org/more#str-to-num-note
PS ที่จริงแล้วลัวะเปลี่ยนเป็นคู่ไม่เป็น ints
ประเภทหมายเลขแสดงถึงจำนวนจริง (ทศนิยมสองตำแหน่งที่แม่นยำ)
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
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
นี่คือสิ่งที่คุณควรใส่
local stringnumber = "10"
local a = tonumber(stringnumber)
print(a + 10)
output:
20