提问人:coderinq 提问时间:2/24/2022 更新时间:2/24/2022 访问量:252
在KDB中将小数转换为百分比的函数
Function to Convert decimals to percentage in KDB
问:
`pct:157.35686
func[`pct]
func::{[x]
?[x>1;x-100;100*x]}
结果应为 57.35%
`pct:0.804892
func[`pct]
func::{[x]
?[x>1;x-100;100*x]}
结果应为 80.48%
答:
1赞
Maurice Lim
2/24/2022
#1
`pct:157.35686
是错误的,因为您没有赋值变量。
func:{[x]
?[x>1;x-100;100*x]}
pct:0.804892
func[pct]
pct:157.35686
func[pct]
应该适用于您的情况。我还删除了该函数的全局赋值。
2赞
SJT
2/24/2022
#2
你对向量条件的使用表明你的参数可能是一个向量†。?
q){?[x>1;x-100;x*100]} 157.35686 0.804892
57.35686 80.4892
样本答案四舍五入到小数点后两位。
q).01 xbar {?[x>1;x-100;x*100]} 157.35686 0.804892
57.35 80.48
样本答案以百分号为后缀:将它们转换为字符串。项目 Join onto 以派生一元,您可以使用 应用。"%"
,[;"%"]
each
q),[;"%"] each string .01 xbar {?[x>1;x-100;x*100]}157.35686 0.804892
"57.35%"
"80.48%"
† 对于 atom 参数,请使用“三元条件”控制结构 Cond。
q){$[x>1;x-100;x*100]}157.35686
57.35686
q){$[x>1;x-100;x*100]}0.804892
80.4892
为什么?因为 Vector Conditional 是一个运算符,并且它的所有三个参数都经过计算。也就是说,无论结果如何,两者都被评估。使用 Cond,计算第二个或第三个表达式;永远不要两者兼而有之。x>1
x-100
x*100
在这个例子中,成本当然可以忽略不计。在其他情况下,第二个和第三个参数中的表达式可能很昂贵。
评论
pct
157.35 = 15735%
pct[137.5792] pct:{[x] ?[x>=100;x mod 100;x*100]}