我使用無痛更新檔案。如何使用 BigDecimal 來完成它?使用 Elasticsearch 6.8.1。 Script JavaDoc Script 構造器是:
public Script (ScriptType type,
java.lang.String lang,
java.lang.String idOrCode,
java.util.Map<java.lang.String, java.lang.Object> params)
我的代碼是:
StringBuilder script = new StringBuilder();
Map<String, Object> params = new HashMap<>();
params.put("poundageRate", poundageRate.doubleValue());
script.append("ctx._source.poundage=ctx._source.amount*params.poundageRate;");
Script scriptObj = new Script(INLINE, DEFAULT_SCRIPT_LANG, script.toString(), params);
我的問題是:如何讓 ctx._source.amount*params.poundageRate 使用 BigDecimal 方法乘以和 setScale
new BigDecimal("ctx._source.amount").multiply(new BigDecimal("params.poundageRate")).setScale(2, HALF_UP).stripTrailingZeros()
非常感謝,我會很感激的
uj5u.com熱心網友回復:
在 ES 6.8 中,Painless絕對支持BigDecimal 。
您應該讓poundageRate引數作為字串而不是將其轉換為雙精度值。
params.put("poundageRate", poundageRate.toString());
然后,您的腳本可以包含您顯示的代碼(稍作修改),即
ctx._source.amount = new BigDecimal(ctx._source.amount).multiply(new BigDecimal(params.poundageRate)).setScale(2, RoundingMode.HALF_UP).stripTrailingZeros()
試試看,效果很好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/393210.html
