如何将double转换为Java中的字节数组?我看了很多其他帖子,但无法找出正确的方法。将double转换为byte []数组
Input = 65.43
byte[] size = 6
precision = 2 (this might change based on input)
expected output (byte[]) = 006543
我可以不使用函数doubleToLongBits()吗?
如何将double转换为Java中的字节数组?我看了很多其他帖子,但无法找出正确的方法。将double转换为byte []数组
Input = 65.43
byte[] size = 6
precision = 2 (this might change based on input)
expected output (byte[]) = 006543
我可以不使用函数doubleToLongBits()吗?
public static byte[] encode(double input, int size, int precision) {
double tempInput = input;
for (int i = 0; i < precision; i++) tempInput *= 10;
int output = (int) tempInput;
String strOut = String.format("%0"+size+"d", output);
return strOut.getBytes();
}
它是完美的,但我还会添加一个参数来指示区域设置以避免出现问题,或者。在输入的小数部分 – sataniccrow
是的,但不要忘记在不同的功能中完成这项工作。我给你的函数需要一个double作为输入,而不是一个字符串...使用'NumberFormat format = NumberFormat.getInstance(Locale.FRANCE))'例如,如果你得到一个逗号而不是一个句点作为输入。 (然后使用'format.parse(inputString).doubleValue();')不要忘记检查这个答案:) – durron597
double doubleValue = 10.42123;
DecimalFormat df = new DecimalFormat("#.##");
String newDouble = df.format(doubleValue);
byte[] byteArray = (newDouble.replace(",", "")).getBytes();
for (byte b : byteArray) {
System.out.println((char)b+"");
}
意大利语区域...因此,作为十进制符号 – sataniccrow
真正double
到byte[]
转换
double d = 65.43;
byte[] output = new byte[8];
long lng = Double.doubleToLongBits(d);
for(int i = 0; i < 8; i++) output[i] = (byte)((lng >> ((7 - i) * 8)) & 0xff);
//output in hex would be 40,50,5b,85,1e,b8,51,ec
double
到BCD转换
double d = 65.43;
byte[b] output = new byte[OUTPUT_LENGTH];
String inputString = Double.toString(d);
inputString = inputString.substring(0, inputString.indexOf(".") + PRECISION);
inputString = inputString.replaceAll(".", "");
if(inputString.length() > OUTPUT_LENGTH) throw new DoubleValueTooLongException();
for(int i = inputString.length() - 1; i >= 0; i--) output[i] = (byte)inputString.charAt(i)
//output in decimal would be 0,0,0,0,6,5,4,3 for PRECISION=2, OUTPUT_LENGTH=8
这是我得到基于你的投入,它符合我的目的。感谢您的帮助!
static int formatDoubleToAscii(double d, int bytesToUse, int minPrecision, byte in[], int startPos) {
int d1 = (int)(d * Math.pow(10, minPrecision));
String t = String.format("%0"+bytesToUse+"d", d1).toString();
System.out.println("d1 = "+ d1 + " t="+ t + " t.length=" + t.length());
for(int i=0 ; i<t.length() ; i++, startPos++) {
System.out.println(t.charAt(i));
in[startPos] = (byte) t.charAt(i);
}
return startPos;
}
您是否尝试创建二进制编码的小数?这就是你的输出结果,但这个问题并不是很清楚。 – lynks
不完全是,我想要移除小数点。如果我输入9999.1234,我的输出应该是999912 – swap