如何在 KDB 中将浮点数转换为整数数据类型?

How do I cast a float to an integer datatype in KDB?

我在 KDB(Q) 中有一个 table,其大小列当前为浮点格式。如何将整个列从 float 转换为 int,同时截断小数位?

您可以通过更新 table

来完成此操作
q)tab:([]bid:1000?5f;price:1000?5f;size:1000?100f)
q)exec t from meta tab
"fff"
q)update "i"$size from `tab
`tab
q)exec t from meta tab
"ffi"

上面中肯的一点就是"i"$的应用,也就是'casting'从float到integer的size列

另一种方法是使用 @ amend 更新列:

q)t:([]sym:500?`3;px:500?10f;size:500?100f)
q)3#t
sym px       size
---------------------
gdh 7.678514 95.25017
jlb 2.345028 42.09728
nln 5.553286 98.80532
q)t:@[t;`size;"i"$] / can also use `t to update t
q)3#t
sym px       size
-----------------
gdh 7.678514 95
jlb 2.345028 42
nln 5.553286 98

我认为还值得指出的是,floor/ceiling 函数分别对 down/up 进行舍入处理,并且在这种情况下比 "i"$ 运行速度稍快,但是这些函数将列转换为 long而不是 int:

q)meta@[t;`size;floor]
c   | t f a
----| -----
sym | s
px  | f
size| j