round print java arrays type-conversion int double

java - print - Convertir doble a matriz int



java round double to int (6)

Tengo un doble

double pi = 3.1415;

Quiero convertir esto a una matriz int

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

Se me ocurrió esto

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

Funciona, pero no me gusta esta solución porque creo que muchas conversiones entre tipos de datos pueden generar errores. ¿Mi código está completo o necesito verificar otra cosa?

¿Y cómo abordarías este problema?


Esta solución no hace suposiciones y utiliza la manipulación de cadenas para obtener el resultado que desea. Obtiene el doble, lo convierte en una cadena, elimina los caracteres ilegales, luego convierte cada uno de los caracteres restantes en caracteres y los almacena en la matriz, en el orden en que aparecen en el doble

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


No sé directamente, pero creo que es más simple:

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


Se puede utilizar en java 8.

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


Ya que quiere evitar los lanzamientos, aquí está la forma aritmética, suponiendo que solo tiene que tratar con números positivos:

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

El manejo de los números negativos se puede hacer fácilmente al verificar el signo al principio y luego usar el mismo código con current = Math.abs(pi) .

Tenga en cuenta que, debido a la aritmética de punto flotante, le dará resultados que podría no esperar para valores que no se pueden representar perfectamente en binario.

Here una idea que ilustra el problema y donde puedes probar mi código.


esto funcionaria tambien

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


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

O un enfoque más seguro con java-9 :

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