2016-03-16 17 views
5

Tôi muốn biết cách Lua xử lý số để chuyển đổi chuỗi bằng cách sử dụng hàm tostring().Lua - Hành vi số thành chuỗi

Nó sẽ chuyển đổi thành một int (dưới dạng chuỗi) nếu số tròn (ví dụ: number == (int) number) hoặc luôn luôn là đầu ra thực (như chuỗi) như 10.0?

Tôi cần bắt chước hành vi chính xác của Lua's tostring trong C, mà không sử dụng API Lua C vì, trong trường hợp này, tôi không sử dụng lua_State.

+0

Tùy thuộc vào phiên bản Lua. –

Trả lời

10

Trong Lua 5.2 hoặc sớm hơn, cả hai tostring(10)tostring(10.0) kết quả là chuỗi "10".

Trong Lua 5.3, điều này đã thay đổi:

print(tostring(10)) -- "10" 
print(tostring(10.0)) -- "10.0" 

Đó là bởi vì Lua 5.3 giới thiệu subtype số nguyên. Từ số Changes in the Language:

Biến đổi của dấu phẩy thành chuỗi bây giờ thêm hậu tố .0 vào kết quả nếu nó trông giống như một số nguyên. (Ví dụ: phao 2.0 sẽ được in dưới dạng 2.0, không phải là 2.) Bạn phải luôn sử dụng định dạng rõ ràng khi bạn cần định dạng cụ thể cho số.

+0

Cảm ơn sự giúp đỡ của bạn. Vì vậy, nó không phải là dễ dàng như tôi mong đợi. Tôi đang sử dụng 5.3.2 và không có kế hoạch sử dụng phiên bản khác. – Virus721

2

Lua chuyển đổi các con số như là:

print(tostring(10)) => "10" 
print(tostring(10.0)) => "10.0" 
print(tostring(10.1)) => "10.1" 

Nếu bạn muốn chơi xung quanh với họ, có một phân tích cú pháp trực tuyến nhỏ cho các lệnh đơn giản như thế này: http://www.lua.org/cgi-bin/demo này sử dụng Lua 5.3.1

chỉnh sửa Tôi phải hỗ trợ nhận xét của Egor, tùy thuộc vào phiên bản của nó. Tôi chạy này cục bộ trên hệ thống của tôi:

Lua 5.2.4 Copyright (C) 1994-2015 Lua.org, PUC-Rio 
> print(tostring(10)) 
10 
> print(tostring(10.0)) 
10 
+0

Cảm ơn tôi sẽ thử điều này. Không có tài liệu chính thức nào về chức năng dây rút của lua? Tôi đã tìm kiếm nhưng thông tin thực sự thưa thớt và bạn phải đọc toàn bộ cuốn sách mọi lúc bạn muốn một thông tin ... – Virus721

+0

tất cả những gì tôi có thể tìm thấy là http://www.lua.org/pil/2.4.html và http://www.lua.org/manual/5.1/manual.html#lua_tostring –

+0

Cũng như tôi nghi ngờ, nếu số == (int) số, nó in một int. Tôi không thể tin rằng không có tài liệu chính thức về các chức năng cơ bản này. Cảm ơn sự giúp đỡ. – Virus721

0

Trong Lua 5.3, do loại nguyên, tostring trên phao (dù đó là giá trị Numeric có thể tương đương với một số nguyên) sẽ bổ sung thêm một hậu tố "'.0', nhưng đó không có nghĩa là bạn không thể rút ngắn nó !

local str = tostring(n) 
if str:sub(-2) == ".0" then 
    str = str:sub(1,-3) 
end 
1

Nếu bạn đang sử dụng 5.3.4 và bạn cần hotfix nhanh, hãy sử dụng math.floor - nó đưa nó vào số int. Điều này đánh bại @warspyking câu trả lời hiệu quả, nhưng thiếu sự mát mẻ đó là bó mã.

>tostring(math.floor(54.0)) 
54 
>tostring(54.0) 
54.0