对字符串值执行算术运算

时间:2016-09-02 14:52:46

标签: string types lua int

我想问一下Lua中的数据类型。 我从串行链接得到一些消息(命令:值),如下所示:

tmp_string = "BRAKE:1"

然后我将这个字符串解析为两个不同函数中的命令和值(一个用于命令,另一个用于值)。这是解析值

的函数
function parser(value)
    index = string.find(value, ":")
    result = value.sub(value, index+1)
    return result
end

我想现在的结果是什么类型的数据?如果我使用字符串匹配,它就可以工作。

...if string.match(state, "1") then...

然而,当我做这样的事情时它也有效

x = (state*65536)/3.2808)

我认为结果是字符串,但我不明白为什么它也适用于数字运算。先感谢您。

1 个答案:

答案 0 :(得分:4)

Lua 5.3参考手册,§3.4.1 - Arithmetic Operators

  

除了取幂和浮点除法之外,算术运算符的工作方式如下:如果两个操作数都是整数,则操作在整数上执行,结果为整数。否则,如果两个操作数都是可以转换为数字的数字或字符串(参见§3.4.3),然后将它们转换为浮点数,则操作将在通常的浮点运算规则(通常是IEEE 754标准),结果是浮点数。

重点是我的。

在处理操作时,Lua将尝试将字符串操作数转换为浮点数,如果它可以工作 - 它可以工作。如果失败,则会出错。

>| '55' / 2
<| 27.5

>| 'foo' / 2
<| error: [string "return 'foo' / 2"]:1: attempt to perform arithmetic on a string value

如果您想明确这个(并且安全)请使用tonumber,并处理nil - 案例。

如果您需要知道Lua中值的类型,可以将变量传递给type并检查生成的字符串。