当负值传递给函数 q/kdb 时,函数 Returns 不需要的值

Function Returns unwanted value when a Negative values is passed to function q/kdb

函数应该return与传递给它的负值相同


我不能完全让你的代码按原样工作,但我可以告诉你负数的问题是因为你使用的是 floorfloor 没有给你负数时正确的“小数点前”部分:

q)floor -0.331 1234.56 1.2345 18908.46 1234561 -1233.544
-1 1234 1 18908 1234561 -1234

使用相同功能的天真的解决方案可能是执行以下操作:

?[col>0;FormatNumber[col;5];"-",/:FormatNumber[abs col;5]]

使用 .Q.f.Q.fmt-27! 可能有更简洁的方法来执行此操作。或者,这种方法仅使用字符串操作(可能只适用于小数字,例如股票价格)

q)prettyPrintNums:{"."sv'@'[;0;{reverse","sv 0N 3#reverse x}]"."vs'neg[0|-[;y]count'[s]-1+s?\:"."]_'s:string x};
q)prettyPrintNums[-0.331 1234.56 1.2345 18908.46 1234561.0 -1233.544;2]
"-0.33"
"1,234.56"
"1.23"
"18,908.46"
"1,234,561"
"-1,233.54"
q)prettyPrintNums[-0.331 1234.56 1.2345 18908.46 1234561.0 -1233.544;5]
"-0.331"
"1,234.56"
"1.2345"
"18,908.46"
"1,234,561"
"-1,233.544"