我在java中输入了我的InfluxDB这个点:
dbConnector.write(Point.measurement(machineData.getOpcuaObject())
.time(machineData.getTimestamp(), TimeUnit.MILLISECONDS)
.addField("value2", round(machineData.getValue().floatValue(),2))
.tag("sensor", machineData.getSensor())
.build());
但这不解决问题,我不知道为什么。
如果我写入潮流那么:
.addField("value2", round(machineData.getValue().floatValue(),2))
我成了这个:
1526622038902000000 0.13704816468572244048 Istdrehm
如果我写入潮流那么:
.addField("value2", 0.13)
我成了这个:
1526622038902000000 0.13 Istdrehm
为什么,任何想法?
圆形代码:
public static float round(float value, int decimalPlace) {
BigDecimal bd = new BigDecimal(Float.toString(value));
bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
return bd.floatValue();
}
答案 0 :(得分:0)
这实际上是一个Java问题而不是InfluxDB问题,但既然我同时做了这两个问题,我想我会给出答案。基本上你想将数字四舍五入到之前的,然后将它存储在InfluxDB中,因为InfluxDB保留了所有的精度。
请参阅此答案:What's the best practice to round a float to 2 decimals?
有关如何在将该数字存储在InfluxDB中之前将小数舍入到2个重要位置。
HTH, 分克