【问题标题】:Performing arithmetic on string values对字符串值执行算术运算
【发布时间】:2017-01-10 17:49:41
【问题描述】:

我想问一些关于 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)

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

【问题讨论】:

  • 如果你告诉 Lua 把一个字符串当作一个数字,它可以,它会转换它。
  • string.match(state, "1") 表示“转换为字符串后的数字是否在内部某处有符号'1'?”

标签: string types lua int


【解决方案1】:

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-case。

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

【讨论】:

    猜你喜欢
    • 2014-02-17
    • 2013-09-06
    • 2013-02-19
    • 2017-04-06
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2014-02-06
    相关资源
    最近更新 更多