将双精度数组转换为整型数组

2022-09-01 14:20:55

我有一个双

double pi = 3.1415;

我想将其转换为int数组

int[] piArray = {3,1,4,1,5};

我想出了这个

double pi = 3.1415;
String piString = Double.toString(pi).replace(".", "");
int[] piArray = new int[piString.length()];
for (int i = 0; i <= piString.length()-1; i++)
   piArray[i] = piString.charAt(i) - '0'; 

它有效,但我不喜欢这个解决方案,因为我认为数据类型之间的大量转换会导致错误。我的代码是否完整,或者我需要检查其他内容吗?

您将如何处理这个问题?


答案 1

我不知道直接的方法,但我认为它更简单:

int[] piArray = String.valueOf(pi)
                      .replaceAll("\\D", "")
                      .chars()
                      .map(Character::getNumericValue)
                      .toArray();

答案 2

既然你想避免强制转换,这里是算术方法,假设你只需要处理正数:

List<Integer> piList = new ArrayList<>();
double current = pi;
while (current > 0) {
    int mostSignificantDigit = (int) current;
    piList.add(mostSignificantDigit);
    current = (current - mostSignificantDigit) * 10;
}

处理负数可以很容易地完成,方法是首先检查符号,然后使用相同的代码。current = Math.abs(pi)

请注意,由于浮点算术,它将为您提供可能无法以二进制形式完美表示的值可能无法预期的结果。

这里有一个ideone,它说明了这个问题,以及你可以在哪里尝试我的代码。