处理浮点数
A float 类型表示一个 IEEE-754 64 位浮点数。
类型名称: float
浮动语法
浮动字面量包含一个十进制整数、小数点和小数部分。
0.0
123.4
-123.456
科学记数法
Flux 不支持科学记数法浮点字面量语法。 但是,您可以使用 float() 将 科学记数法字符串 转换为浮点类型。
1.23456e+78
// Error: error @1:8-1:9: undefined identifier e
float(v: "1.23456e+78")
// Returns 1.23456e+78 (float)
无限
Flux 不支持无限浮点文字语法 (+Inf 和 -Inf)。但是,您可以使用 float() 将无限字符串转换为浮点类型。
+Inf
// Error: error @1:2-1:5: undefined identifier Inf
float(v: "+Inf")
// Returns +Inf (float)
不是一个数字
Flux不支持非数字(NaN)浮点文字语法。 但是,您可以使用 float() 将 NaN字符串 转换为浮点类型。
NaN
// Error: error @1:2-1:5: undefined identifier NaN
float(v: "NaN")
// Returns NaN (float)
将数据类型转换为浮点数
使用 float() 函数 将以下 基本类型 转换为浮点数:
- string: 必须是一个数字字符串或 科学计数法
- 布尔值:
true转换为1.0,false转换为0.0 - 整数
- 无符号整数
float(v: "1.23")
// 1.23
float(v: true)
// Returns 1.0
float(v: 123)
// Returns 123.0
将列转换为浮点数
Flux 让你可以遍历 表流 中的行并将列转换为浮点数。
将 _value 列转换为浮点数,使用 toFloat() 函数。
toFloat() 仅在 _value 列上操作。
data
|> toFloat()
给定以下输入数据:
| _时间 | _值 (int) |
|---|---|
| 2021-01-01T00:00:00Z | 10 |
| 2021-01-01T02:00:00Z | 20 |
| 2021-01-01T03:00:00Z | 30 |
| 2021年01月01日 04:00:00 | 40 |
上面的例子返回:
| 时间 | 值 (浮动) |
|---|---|
| 2021-01-01T00:00:00Z | 10.0 |
| 2021-01-01T02:00:00Z | 20.0 |
| 2021-01-01T03:00:00Z | 30.0 |
| 2021-01-01T04:00:00Z | 40.0 |
将任何列转换为浮点数:
data
|> map(fn: (r) => ({ r with index: float(v: r.index) }))
给定以下输入数据:
| 时间 | 索引 (int) |
|---|---|
| 2021-01-01T00:00:00Z | 1 |
| 2021-01-01T02:00:00Z | 2 |
| 2021-01-01T03:00:00Z | 3 |
| 2021-01-01T04:00:00Z | 4 |
上面的例子返回:
| _时间 | 索引 (浮点数) |
|---|---|
| 2021-01-01T00:00:00Z | 1.0 |
| 2021-01-01T02:00:00Z | 2.0 |
| 2021-01-01T03:00:00Z | 3.0 |
| 2021-01-01T04:00:00Z | 4.0 |
对浮点数进行操作
对浮点数执行算术操作
要执行加法、减法、乘法或除法等操作,使用 Flux 算术运算符。 操作数必须是相同类型。
1.23 + 45.67
// Returns 46.9
1.23 - 45.67
// Returns -44.440000000000005
float(v: "12345e+67") * 100.0
// Returns 1.2345000000000001e+73
144.0 / 12.0
// Returns 12.0
10.0 ^ 2.0
// Returns 100.0
浮点运算中的固有舍入误差
为了将无限数量的实值适配到有限的位数,计算机系统必须在算术操作中对浮点值进行舍入。这导致某些操作中出现小的舍入误差。
比较浮点值
使用 Flux 比较操作符 来比较浮点值。操作数必须是相同类型。该操作返回一个浮点数。
12345600.0 == float(v: "1.23456e+07")
// Returns true
1.2 > -2.1
// Returns true
四舍五入浮点值
- 导入
math包。 - 使用
math.round()将数字四舍五入到最接近的整数。
import "math"
math.round(x: 1.54)
// Returns 2.0
Flux数学包
使用math包对浮点值进行操作。