ElasticSearch脚本字段返回不正确的值

时间:2016-10-06 03:18:57

标签: elasticsearch

我的文档cd字段为44.4 当我使用" script_fields如下:

"doc['cd'].value + 1"

script_fields值将返回45.400001525878906

请帮助我使用script_fields值返回45.4

1 个答案:

答案 0 :(得分:2)

为了舍入浮点值,请使用Math.round()函数。 以下将返回两位小数后的值。

Math.round(doc['your_custom_type_var'].value * 100.0)/100.0

如果要在3位小数后向上舍入,则将值更改为:

Math.round(doc['your_custom_type_var'].value * 1000.0)/1000.0

根据您的情况,请执行以下操作:

Math.round((doc['cd'].value + 1) * 10.0 - 0.5 )/10.0 // -0.5 for getting the correct result. For this 45.401 and 45.601 both will return 45.6

备注

Math.round()函数返回与参数最接近的int。例如

Math.round(45.40000152) // will return the value 45
Math.round(45.60000152) // will return the value 46

要获得正确答案,您可以将0.5替换为实际数字,然后向上舍入。然后它将返回我们想要获得的值。

首先我们将值与10.0一起用于将小数位移一个单位(对于上面的值454.0000152)。舍入此浮点值的缩减(对于上述值454),因此我们将整数除以10.0,以获得从实际值向上舍入一位小数的值(对于上述值45.4)。

想想,这会有所帮助。