This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch memtsblock
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit e66a4d5c731b5e66c877023feb3b3ed57cf52d43
Author: HTHou <[email protected]>
AuthorDate: Mon May 2 17:36:21 2022 +0800

    roundWithGivenPrecision
---
 .../apache/iotdb/db/utils/datastructure/DoubleTVList.java    | 12 ++++++++++++
 .../org/apache/iotdb/db/utils/datastructure/FloatTVList.java | 12 ++++++++++++
 2 files changed, 24 insertions(+)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
index 517bd5a574..9abb886a70 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
@@ -213,14 +213,26 @@ public class DoubleTVList extends TVList {
     ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
     for (int i = 0; i < timestamps.size() - 1; i++) {
       timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      getValuesWithGivenPrecision(values.get(i), floatPrecision, encoding);
       valueBuilder.writeDoubles(values.get(i), ARRAY_SIZE);
     }
     timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % 
ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    getValuesWithGivenPrecision(values.get(values.size() - 1), floatPrecision, 
encoding);
     valueBuilder.writeDoubles(values.get(values.size() - 1), size % ARRAY_SIZE 
== 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
     builder.declarePositions(size);
     return builder.build();
   }
 
+  private void getValuesWithGivenPrecision(double[] values, int 
floatPrecision, TSEncoding encoding) {
+    if (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF) {
+      for (int i = 0; i < values.length; i++) {
+        if (!Double.isNaN(values[i])) {
+          values[i] = MathUtils.roundWithGivenPrecision(values[i], 
floatPrecision);
+        }
+      }
+    }
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
index df5eaa4029..31eb193699 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
@@ -213,14 +213,26 @@ public class FloatTVList extends TVList {
     ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
     for (int i = 0; i < timestamps.size() - 1; i++) {
       timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+      getValuesWithGivenPrecision(values.get(i), floatPrecision, encoding);
       valueBuilder.writeFloats(values.get(i), ARRAY_SIZE);
     }
     timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % 
ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+    getValuesWithGivenPrecision(values.get(values.size() - 1), floatPrecision, 
encoding);
     valueBuilder.writeFloats(values.get(values.size() - 1), size % ARRAY_SIZE 
== 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
     builder.declarePositions(size);
     return builder.build();
   }
 
+  private void getValuesWithGivenPrecision(float[] values, int floatPrecision, 
TSEncoding encoding) {
+    if (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF) {
+      for (int i = 0; i < values.length; i++) {
+        if (!Float.isNaN(values[i])) {
+          values[i] = MathUtils.roundWithGivenPrecision(values[i], 
floatPrecision);
+        }
+      }
+    }
+  }
+
   @Override
   protected void releaseLastValueArray() {
     PrimitiveArrayManager.release(values.remove(values.size() - 1));

Reply via email to