文档文档

使用无符号整数

无符号整数 (uinteger) 类型表示一个无符号 64 位整数。

类型名称: uint
最小值: 0
最大值: 18446744073709551615

无符号整数语法

Flux 不提供无符号整数的字面量语法。但是,您可以使用 uint()基本数据类型转换为无符号整数

uint(v: 123)
// Returns 123 (uint)

将数据类型转换为无符号整数

使用 uint() 函数 将以下基本类型转换为无符号整数

  • string: 返回数值字符串 ([0-9]) 的无符号整数等价值
  • bool: true 返回 1false 返回 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)。要执行此操作,请执行以下步骤

  1. 导入 math
  2. 使用 math.round() 在转换为无符号整数之前舍入浮点值。
import "math"

uint(v: math.round(x: 12.54))
// Returns 13

将十六进制字符串转换为无符号整数

要将数字的十六进制字符串表示形式转换为无符号整数,请执行以下操作

  1. 导入 contrib/bonitoo-io/hex
  2. 使用 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:00Z1.23
2021-01-01T02:00:00Z4.56
2021-01-01T03:00:00Z-7.89
2021-01-01T04:00:00Z10.11
上面的示例返回
_time_value (无符号整数)
2021-01-01T00:00:00Z1
2021-01-01T02:00:00Z4
2021-01-01T03:00:00Z18446744073709551609
2021-01-01T04:00:00Z10

要将任何列转换为无符号整数:

  1. 使用 map() 迭代并重写行。
  2. 使用 uint() 将列值转换为无符号整数。
data
    |> map(fn: (r) => ({ r with uid: uint(v: r.uid) }))
给定以下输入数据
_timeindex (字符串)
2021-01-01T00:00:00Z100010024
2021-01-01T02:00:00Z100050213
2021-01-01T03:00:00Z200130763
2021-01-01T04:00:00Z101420099
上面的示例返回
_timeindex (无符号整数)
2021-01-01T00:00:00Z100010024
2021-01-01T02:00:00Z100050213
2021-01-01T03:00:00Z200130763
2021-01-01T04:00:00Z101420099

对无符号整数进行运算

对无符号整数执行算术运算

要执行加法、减法、乘法或除法等无符号整数运算,请使用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

此页面是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像目前一样使用它,而无需对代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、近实时数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、只读副本、增强的安全性以及数据压缩功能,从而实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看