将double转换为int数组

问题描述 投票:28回答:6

我有一个双

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'; 

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

那你怎么解决这个问题呢?

java arrays type-conversion int double
6个回答
23
投票

我不知道直道,但我觉得它更简单:

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

14
投票

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

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)相同的代码轻松完成。

请注意,由于浮点算术,它将为您提供无法用二进制表示的值的结果。

Here是一个说明问题的地方,你可以尝试我的代码。


4
投票
int[] result = Stream.of(pi)
            .map(String::valueOf)
            .flatMap(x -> Arrays.stream(x.split("\\.|")))
            .filter(x -> !x.isEmpty())
            .mapToInt(Integer::valueOf)
            .toArray();

或者使用java-9更安全的方法:

 int[] result = new Scanner(String.valueOf(pi))
            .findAll(Pattern.compile("\\d"))
            .map(MatchResult::group)
            .mapToInt(Integer::valueOf)
            .toArray();

3
投票

你可以在java 8中使用

int[] piArray = piString.chars().map(Character::getNumericValue).toArray();

0
投票

这也行

int[] piArray = piString.chars().map(c -> c-'0').toArray();

-2
投票

此解决方案不做任何假设,并使用字符串操作来获得您想要的结果。获取double,将其转换为字符串,删除非法字符,然后将每个剩余字符转换为整数并将它们存储在数组中 - 按照它们出现在double中的顺序

        double pi           = 3.1415;
        String temp         = ""+ pi;
        String str          = "";
        String validChars   = "0123456789";

        //this removes all non digit characters 
        //so '.' and '+' and '-' same as string replace(this withThat)
        for(int i =0; i<temp.length(); i++){
          if(validChars.indexOf(temp.charAt(i)) > -1 ){
              str = str +temp.charAt(i);
          }
        }

        int[] result = new int[str.length()];

        for(int i =0; i<str.length(); i++){
          result[i] = Integer.parseInt(""+str.charAt(i));
          System.out.print(result[i]);
        }

        return result; //your array of ints
© www.soinside.com 2019 - 2024. All rights reserved.