java - 在 Java 中将 double 值转换为字节数组的最佳和有效方法

标签 java performance

<分区>

我正在开发一个低延迟系统,需要一个解决方案来将 double 转换为字节数组,但对十进制数具有精度。我需要考虑在解决方案中创建的对象应该更少。此外,我获得了两倍的值(value)。

我现在的实现有点像

int offset = 0;
double d = 1211.11;
long integerPart = (long) d;
byte[] b = new byte[16];

offset += addToByteArray(integerPart, b, offset); 
//implementation to add each digit to byte array, returns new offset

int lengthDecimal = 16 - offset;
if(lengthDecimal > 0)
b[offset++] = '.';
long tmp = 1;

for(int i=0; i<lengthDecimal; i++){
 tmp = tmp * 10;
 int digit = (int)(((long) (d * tmp)) % 10);
 b[offset++] = (byte) ('0' + digit);
}

然后操作字节数组以修剪后面的零和“.”如果需要的话。

问题是如果我检查字节数组,我找不到确切的数字。因为,我使用的是 double ,所以在工作时小数点的精度会丢失。

我搜索并发现到处都可以使用 BigDecimal。使用 BigDecimal 似乎工作正常,但我担心性能和创建的对象数量,因为这部分代码经常被命中。

我也试过像这样使用 String

String doubleNumber = Double.toString(d);
long fractionalPart = 0;

offset += addToByteArray(integerPart, b, offset); 
if(doubleNumber.substring(doubleNumber.indexOf(".")).length() > 0) {
  fractionalPart = Long.valueOf(doubleNumber.substring(doubleNumber.indexOf(".") + 1));
  b[offset++] = '.';
  offset += addToByteArray(fractionalPart, b, offset);
}

请为我建议最好的方法。

最佳答案

byte[] bytes = new byte[8];
java.nio.ByteBuffer.wrap(bytes).putDouble(yourDouble);

关于java - 在 Java 中将 double 值转换为字节数组的最佳和有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14062904/

相关文章:

java - Java 中的隐式和显式并行

html - 通用选择器对性能有何影响?

c++ - 按概率排序 if...else if 语句有什么影响?

java - JSF 组件 - IN : pick file from server; OUT: file path only

java - 日期间隔大于应该的

python - 如何快速找到 sqlite 数据库中最接近给定输入的行?

performance - 为什么在类属性中改变元胞数组这么慢?

javascript - 测量四个相似 Javascript 函数之间的 CPU 负载差异

java - ForkJoinPool 创造了大量的 worker

java - 如何在 Java 中将 ArrayList 转换为 Array 然后返回它?