显示结果精确到小数点后两位,不四舍五入
Display result precision upto two decimal places in kdb without rounding off
x:1.375083
pk[x]
pk:{[x] string[[[0.01*floor 0.5+100*x]* 100]mod 100]}
"38"
在我的函数中它四舍五入为 38,但我希望结果是 37.5 而不是 38
我真的不明白你的要求是什么,但你在结果中的四舍五入比你想要的少了一个 dp - 请尝试提供更多细节,说明你希望你的函数做什么以及它应该期望的条件。
您应该尝试 运行 完成函数的每个阶段并打印输出。这将帮助您了解哪里出错了。
q)x
1.375083
q)1000*x
1375.083
q)floor 0.5+1000*x
1375
q)0.001*floor 0.5+1000*x
1.375
q)100*0.001*floor 0.5+1000*x
137.5
q)(100*0.001*floor 0.5+1000*x) mod 100
37.5
q)pk:{[x] string (100*0.001*floor 0.5+1000*x) mod 100}
q)pk x
"37.5"
如果我关注,1.375083 是您想要报告为 37.5% 增长的比率;并且 2.375083 将增加 137.5%。
q)1.375083 2.375083-1
0.375083 1.375083
q).1*floor .5+1000*1.375083 2.375083-1
37.5 137.5
q)pk:string .1* floor .5+ 1000* -[;1] @
q)pk 1.375083 2.375083
"37.5"
"137.5"
由于 pk
只不过是一元序列,因此可以将其定义为组合,从而避免了 lambda 的(微小)开销。
如果你更喜欢lambda,那当然是
{string .1*floor .5+1000*x-1}
x:1.375083
pk[x]
pk:{[x] string[[[0.01*floor 0.5+100*x]* 100]mod 100]}
"38"
在我的函数中它四舍五入为 38,但我希望结果是 37.5 而不是 38
我真的不明白你的要求是什么,但你在结果中的四舍五入比你想要的少了一个 dp - 请尝试提供更多细节,说明你希望你的函数做什么以及它应该期望的条件。
您应该尝试 运行 完成函数的每个阶段并打印输出。这将帮助您了解哪里出错了。
q)x
1.375083
q)1000*x
1375.083
q)floor 0.5+1000*x
1375
q)0.001*floor 0.5+1000*x
1.375
q)100*0.001*floor 0.5+1000*x
137.5
q)(100*0.001*floor 0.5+1000*x) mod 100
37.5
q)pk:{[x] string (100*0.001*floor 0.5+1000*x) mod 100}
q)pk x
"37.5"
如果我关注,1.375083 是您想要报告为 37.5% 增长的比率;并且 2.375083 将增加 137.5%。
q)1.375083 2.375083-1
0.375083 1.375083
q).1*floor .5+1000*1.375083 2.375083-1
37.5 137.5
q)pk:string .1* floor .5+ 1000* -[;1] @
q)pk 1.375083 2.375083
"37.5"
"137.5"
由于 pk
只不过是一元序列,因此可以将其定义为组合,从而避免了 lambda 的(微小)开销。
如果你更喜欢lambda,那当然是
{string .1*floor .5+1000*x-1}