Java 将整数/小数点数组转换为单个数字

Java 将整数/小数点数组转换为单个数字,java,arrays,Java,Arrays,我想知道是否有一种方法可以将整数数组(可能还有小数点)转换成单个数字(一个int或一个double)?例如,如果我有数组{4,1,,,9},是否可以将其转换为双精度,41.9?我正在实现一种方法,通过迭代和*10到不同的幂来实现它,但我不确定它是否会成功,因为存在舍入误差等(它是否会一直正确地计算9*(10^-1)。这只在数组中的可能值非常有限(例如0到9)的情况下起作用而且元素的数量并没有那么多 以下算法可以实现这一点: long l = 0x00; int[] array = {5,2,3,

我想知道是否有一种方法可以将整数数组(可能还有小数点)转换成单个数字(一个
int
或一个
double
)?例如,如果我有数组{4,1,,,9},是否可以将其转换为
双精度
,41.9?我正在实现一种方法,通过迭代和*10到不同的幂来实现它,但我不确定它是否会成功,因为存在舍入误差等(它是否会一直正确地计算9*(10^-1)。

这只在数组中的可能值非常有限(例如
0
9
)的情况下起作用而且元素的数量并没有那么多

以下算法可以实现这一点:

long l = 0x00;
int[] array = {5,2,3,6,7,8};
int radix = 9;
for(int i = 0x00; i < array.length; i++) {
    l *= radix;
    l += array[i];
}
return l;
长l=0x00;
int[]数组={5,2,3,6,7,8};
int基数=9;
对于(int i=0x00;i
其中,基数是最大值
+1

然而,即使如此,long的最大值也为
2^63-1
9 223 372 036 854 775 807
。这意味着,如果每个项目的可能值数为10,则只能存储17个项目



一个
double
不能解决问题。由于
double
s使用浮点语义,因此它们只能正确存储大约12位小数。如果你把更多的东西储存在一个双层仓库里,信息最终会丢失。最低有效值的情况取决于较大的值(因为有一半的时间
0
将生成最低有效位,而在另一种情况下
1

我想一个快速而肮脏的解决方案是转换整数和点的数组(在这种情况下,您可能有一个类似于
{'4','1','9'}
)转换为字符串,
“41.9”
,然后使用Double.parseDouble将字符串解析为双精度。虽然不会很快。

谢谢你的回答。但是,我一点也不担心上述限制,所以我认为我现在还可以。:)请阅读。没有任何语言或计算机可以使用本机浮点类型准确表示0.9,如
float
double
。因此请不要这样做“不要称之为“Java的舍入错误”。这些错误几乎是每台计算机特有的。Java有一个
BigDecimal
类,如果您需要精确的小数位数,可以使用该类。我已经编辑了我的帖子。@ajb:我想您需要更具体一些:没有一台使用流行浮点表示法的二进制计算机能够准确地存储
0.9
。您可以但是,如果使用分数或基数10(十进制是这样的)…@CommuSoft是的,我本可以更精确一点。但是我认为你所说的“流行”就是我所说的“本机”,因为“流行”类型通常是内置在硬件中的类型。自从20世纪70年代的一些老Burroughs野兽出现以来,我还没有见过一台计算机以本机方式处理十进制浮点类型。有没有办法将数组的一部分转换(从指定的索引转换为另一个索引)或者是生成另一个仅包含我要转换的部分的数组的唯一方法?您可以使用子字符串(int beginIndex,int endIndex)来指定要包含的字符串的开头和结尾。这种方法没有问题。例如,如果有两点,例如
{4,1,0.9,0.7}
?是的,这会导致NumberFormatException。显然,您必须记住格式。