2016-10-06 1 views
0

ich ein Dokument mit cd Feld haben 44,4 ist, wenn ich „script_fields wie unten verwenden:Elasticsearch Script Feld zurückkehren falschen Wert

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

script_fields Wert kehrt 45.400001525878906

Bitte helfen Sie mir script_fields Wert zu verwenden zurück zu 45.4

+0

Jetzt überprüfen Sie mit dem folgenden. Kenne mich, wenn irgendeine Frage. Danke – sunkuet02

Antwort

2

Zum Aufrunden Ihrer Gleitkommawerte verwenden Sie Math.round() Funktion Der folgende Wert gibt den Wert nach zwei Dezimalstellen zurück.

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

Wenn Sie nach 3 Dezimalstellen abzurunden dann ändern Sie den Wert als wie:

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

Für Ihren Fall tun das folgende:

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 

Hinweise

Math.round() Funktion gibt die nächste zurück Int zu dem Argument. Zum Beispiel

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

Um die richtige Antwort erhalten Sie 0.5 auf die tatsächliche Anzahl ersetzen kann und dann Abrunden up.Then es wird den Wert zurück, die wir erhalten möchten.

Zuerst multiplizieren wir den Wert mit 10,0, um die Dezimalstelle um eine Einheit nach rechts zu verschieben (für den obigen Wert 454.0000152). Nach dem Runden dieser Schnitte der Gleitkommawerte (für den obigen Wert 454), teilen wir also die ganzen Zahlen durch 10.0, um den Wert, der um eine Dezimalstelle aufgerundet wurde, vom tatsächlichen Wert zu erhalten (für den obigen Wert 45.4).

Denken Sie nach, es wird Ihnen helfen.

+0

Danke für deine Antwort. Aber cd filed ist dynamischer Wert (zB: 44.2, 44.674). Also, der Wert wird falsch sein, wenn ich Ihre Lösung anwende. Ich möchte script_fields, die zu 45.2 zurückkehren, 45.674 –

+0

Sie müssen den Dezimalpunkt festlegen, den Sie sehen möchten. zum Beispiel 1,2 oder drei. Wenn Sie eine dynamische Position festlegen möchten. Dann benutze 'Math.pow (base, power)' anstelle von 10.0. Geben Sie Feedback, wenn eine Abfrage – sunkuet02

+0

Und zum Runden Problem, ich bin meine Antwort reparieren – sunkuet02