#elasticsearch
#elasticsearch
Вопрос:
У меня есть документ с cd
полем 44,4, когда я использую «script_fields, как показано ниже :
"doc['cd'].value 1"
script_fields
значение будет возвращено 45.400001525878906
Пожалуйста, помогите мне использовать script_fields
возврат значения для 45.4
Комментарии:
1. Теперь проверьте приведенное ниже. Знайте меня, если возникнет какой-либо запрос. Спасибо
Ответ №1:
Для округления значений с плавающей запятой используйте 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
).
Думаю, это поможет.
Комментарии:
1. Спасибо за ваш ответ. Но на компакт-диске записано динамическое значение (например: 44.2, 44.674). Таким образом, значение будет неправильным, когда я применю ваше решение. Я хочу использовать script_fields, которые вернутся к 45.2, 45.674
2. Вам нужно определить место с десятичной запятой, которое вы хотите видеть. например, 1,2 или три. Если вы хотите установить динамическую позицию. затем используйте
Math.pow(base, power)
вместо 10.0. Дайте отзыв, если какой-либо запрос3. И для проблемы с округлением я исправляю свой ответ
4. Теперь проверьте ответ.