使用无符号整数
无符号整数 (uinteger) 类型表示一个无符号 64 位整数。
类型名称: uint
最小值: 0
最大值: 18446744073709551615
无符号整数语法
Flux 不提供无符号整数的字面量语法。但是,您可以使用 uint()
将基本数据类型转换为无符号整数。
uint(v: 123)
// Returns 123 (uint)
将数据类型转换为无符号整数
- string: 返回数值字符串 (
[0-9]
) 的无符号整数等价值 - bool:
true
返回1
,false
返回0
- duration: 返回持续时间内的纳秒数
- time: 返回等效的 纳秒纪元时间戳
- float: 截断浮点值的小数部分,并返回无符号整数等价值
- int: 返回整数的无符号整数等价值
uint(v: "123")
// 123
uint(v: true)
// Returns 1
uint(v: 1d3h24m)
// Returns 98640000000000
uint(v: 2021-01-01T00:00:00Z)
// Returns 1609459200000000000
uint(v: 12.54)
// Returns 12
uint(v: -54321)
// Returns 18446744073709497295
在转换为无符号整数之前对浮点值进行舍入
当将浮点数转换为整数时,uint()
会截断浮点值的小数部分(例如,将 12.54
转换为 12
)。您可能希望在转换之前将浮点值四舍五入到最接近的整数(将 12.54
转换为 13
)。要执行此操作,请执行以下步骤
- 导入
math
包。 - 使用
math.round()
在转换为无符号整数之前舍入浮点值。
import "math"
uint(v: math.round(x: 12.54))
// Returns 13
将十六进制字符串转换为无符号整数
要将数字的十六进制字符串表示形式转换为无符号整数,请执行以下操作
- 导入
contrib/bonitoo-io/hex
包。 - 使用
hex.uint()
将十六进制字符串转换为无符号整数。
import "contrib/bonitoo-io/hex"
hex.uint(v: "-1e240")
// Returns 123456
将列转换为无符号整数
Flux 允许您遍历表流中的行,并将列转换为无符号整数。
要将 _value
列转换为无符号整数,请使用 toUInt()
函数。
toUInt()
仅对 _value
列进行操作。
data
|> toUInt()
给定以下输入数据
_time | _value (浮点数) |
---|---|
2021-01-01T00:00:00Z | 1.23 |
2021-01-01T02:00:00Z | 4.56 |
2021-01-01T03:00:00Z | -7.89 |
2021-01-01T04:00:00Z | 10.11 |
上面的示例返回
_time | _value (无符号整数) |
---|---|
2021-01-01T00:00:00Z | 1 |
2021-01-01T02:00:00Z | 4 |
2021-01-01T03:00:00Z | 18446744073709551609 |
2021-01-01T04:00:00Z | 10 |
要将任何列转换为无符号整数:
data
|> map(fn: (r) => ({ r with uid: uint(v: r.uid) }))
给定以下输入数据
_time | index (字符串) |
---|---|
2021-01-01T00:00:00Z | 100010024 |
2021-01-01T02:00:00Z | 100050213 |
2021-01-01T03:00:00Z | 200130763 |
2021-01-01T04:00:00Z | 101420099 |
上面的示例返回
_time | index (无符号整数) |
---|---|
2021-01-01T00:00:00Z | 100010024 |
2021-01-01T02:00:00Z | 100050213 |
2021-01-01T03:00:00Z | 200130763 |
2021-01-01T04:00:00Z | 101420099 |
对无符号整数进行运算
对无符号整数执行算术运算
要执行加法、减法、乘法或除法等无符号整数运算,请使用Flux 算术运算符。操作数必须是相同的类型。该运算返回一个无符号整数。
当使用无符号整数操作数进行运算时,小数结果将在小数点处被截断。
uint(v: 1) + uint(v: 45)
// Returns 46
uint(v: 1) - uint(v: 45)
// Returns 18446744073709551572
uint(v: 12) * uint(v: 100)
// Returns 1200
uint(v: 100) / uint(v: 200)
// Returns 0
uint(v: 10) ^ uint(v: 2)
// Returns 100
对无符号整数执行位运算
使用 experimental/bitwise
包 对无符号整数执行位运算。
import "experimental/bitwise"
bitwise.uand(a: uint(v: 12), b: uint(v: 21))
// Returns 4
bitwise.uor(a: uint(v: 12), b: uint(v: 21))
// Returns 29
bitwise.uxor(a: uint(v: 12), b: uint(v: 21))
// Returns 25
bitwise.uclear(a: uint(v: 12), b: uint(v: 21))
// Returns 8
bitwise.unot(a: uint(v: 12))
// Returns 18446744073709551603
bitwise.ulshift(a: uint(v: 12), b: uint(v: 21))
// Returns 25165824
bitwise.urshift(a: uint(v: 21), b: uint(v: 4))
// Returns 1
比较无符号整数
使用 Flux 比较运算符 比较无符号整数。操作数必须是相同的类型。该运算返回一个布尔值。
uint(v: 12345600) == uint(v: 12345601)
// Returns false
uint(v: 2) > uint(v: -2)
// Returns false
此页面是否对您有帮助?
感谢您的反馈!