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%
`pct:157.35686
错误,因为您没有分配变量。
func:{[x]
?[x>1;x-100;100*x]}
pct:0.804892
func[pct]
pct:157.35686
func[pct]
应该适合你的情况。我也删除了函数的全局分配。
你对 Vector Conditional ?
的使用表明你的论点可能是一个向量†。
q){?[x>1;x-100;x*100]} 157.35686 0.804892
57.35686 80.4892
样本答案是 rounded down 到小数点后两位。
q).01 xbar {?[x>1;x-100;x*100]} 157.35686 0.804892
57.35 80.48
示例答案以百分号为后缀:将它们转换为字符串。将 Join 投影到 "%"
上以导出一元 ,[;"%"]
,您可以将其应用于 each
.
q),[;"%"] each string .01 xbar {?[x>1;x-100;x*100]}157.35686 0.804892
"57.35%"
"80.48%"
† 对于原子参数,使用“三元条件”控制结构 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 是一个运算符,它的所有三个参数都会被求值。也就是说,无论 x>1
的结果如何, x-100
和 x*100
都会被评估。使用 Cond,计算第二个或第三个表达式;从来没有。
在这个例子中,成本当然可以忽略不计。在其他情况下,第二个和第三个参数中的表达式可能很昂贵。
`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%
`pct:157.35686
错误,因为您没有分配变量。
func:{[x]
?[x>1;x-100;100*x]}
pct:0.804892
func[pct]
pct:157.35686
func[pct]
应该适合你的情况。我也删除了函数的全局分配。
你对 Vector Conditional ?
的使用表明你的论点可能是一个向量†。
q){?[x>1;x-100;x*100]} 157.35686 0.804892
57.35686 80.4892
样本答案是 rounded down 到小数点后两位。
q).01 xbar {?[x>1;x-100;x*100]} 157.35686 0.804892
57.35 80.48
示例答案以百分号为后缀:将它们转换为字符串。将 Join 投影到 "%"
上以导出一元 ,[;"%"]
,您可以将其应用于 each
.
q),[;"%"] each string .01 xbar {?[x>1;x-100;x*100]}157.35686 0.804892
"57.35%"
"80.48%"
† 对于原子参数,使用“三元条件”控制结构 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 是一个运算符,它的所有三个参数都会被求值。也就是说,无论 x>1
的结果如何, x-100
和 x*100
都会被评估。使用 Cond,计算第二个或第三个表达式;从来没有。
在这个例子中,成本当然可以忽略不计。在其他情况下,第二个和第三个参数中的表达式可能很昂贵。