Documentation

处理无符号整数

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

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

无符号整数语法

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

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

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

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

  • string: 返回数字字符串 ([0-9]) 的无符号整型等价值
  • 布尔值: 返回 1 表示 true0 表示 false
  • duration: 返回持续时间中的纳秒数
  • 时间: 返回等效的 纳秒纪元时间戳
  • 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()
给定以下输入数据:
时间(浮动)
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
上面的例子返回:
_时间_值 (uint)
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) }))
给定以下输入数据:
_时间索引 (字符串)
2021-01-01T00:00:00Z100010024
2021年01月01日T02:00:00Z100050213
2021-01-01T03:00:00Z200130763
2021-01-01T04:00:00Z101420099
上面的例子返回:
时间索引 (uint)
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 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: