2016-08-30 2 views
3

Gibt es eine gute Möglichkeit, durch ein Float die ersten vier Zahlen zu durchsuchen und jede Zahl separat mit int []?So gehen Sie durch eine Zahl (float) und erhalten jede Zahl separat mit einem int. Java

Beispiel: der Schwimmer 23,51 wird den Integer-Array, array [0] = 2, array [1] = 3, array [2] = 5 und zuletzt array [3] = 1

My Code :

public void printNumber(float number){ 
    String string = String.valueOf(number); 
    while(!numbers.isEmpty()){ 
     numbers.remove(0); 
    } 
    for(int i = 0; i < string.length(); i++) { 
     int j = Character.digit(string.charAt(i), 10); 
     this.number = new Number(j); 
     numbers.add(this.number); 
     System.out.println("digit: " + j); 
    } 
} 

sollte ich diese Zahl erwähnen ist eine Klasse, die nur ein anderes Bild auf der Anzahl basiert kehrt der Konstruktor gegeben und natürlich die Zahl selbst.

Zahlen ist eine Arraylist

+3

„Die ersten vier Zahlen eines Schwimmers“ nicht für binäre gut definiert. – chrylis

+0

Bedeutet es, dass es nicht getan werden kann? –

+3

mit einem Formatbezeichner in eine Zeichenfolge konvertieren und dann die Zeichenfolgenelemente durchlaufen? – OldProgrammer

Antwort

5

float zu String Festkommaformat konvertieren verwenden, dann durch seine Charaktere gehen one-by-one, und ignorieren den Dezimalpunkt.

Wenn die Zahl auch negativ sein könnte, müssen Sie die Aufmerksamkeit auf die Zeichen in der String Ausgabe zahlen:

float v = 23.51F; 
DecimalFormat df = new DecimalFormat("#"); 
df.setMaximumFractionDigits(8); 
char[] d = df.format(v).toCharArray(); 
int count = 0; 
for (int i = 0 ; i != d.length ; i++) { 
    if (Character.isDigit(d[i])) { 
     count++; 
    } 
} 
int[] res = new int[count]; 
int pos = 0; 
for (int i = 0 ; i != d.length ; i++) { 
    if (Character.isDigit(d[i])) { 
     res[pos++] = Character.digit(d[i], 10); 
    } 
} 

Demo.

Wichtig: Beachten Sie, dass float s von Natur aus ungenau sind, Sie können also eine oder zwei "streunende" Ziffern erhalten. Zum Beispiel Ihr Beispiel erzeugt

[2 3 5 1 0 0 0 0 2 3] 

mit 2 und 3 am Ende.

+1

Tipp: Um die genannte Ungenauigkeit von 'float' zu vermeiden, die am Ende zusätzliche überflüssige Ziffern einführt, verwenden Sie [' BigDecimal'] (https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal .html) Objekte zur Darstellung von Bruchzahlen anstelle von "float" und "double" Primitiven. –

+0

@BasilBourque Absolut, 'BigDecimal' würde dieses Problem lösen. Allerdings muss man zu Beginn "BigDecimal" haben. Wenn Sie es aus einem "float" oder "double" konstruieren, ist das Problem zurück; Wenn Sie mit einem 'String' beginnen, können Sie' BigDecimal' ganz überspringen. – dasblinkenlight

+1

Der Code ist zu lang wie für mich;) – MaxZoom

0

Verwenden Sie die statische Methode Float.toString(), um Ihren Float in einen String zu konvertieren.

Dann gehen Sie durch jedes Zeichen und verwenden Sie Integer.parseInt(), um zurück zu einem Int.

public void printNumber(float number){ 
    String string = Float.toString(number); 

    for(int i = 0; i < string.length(); i++) { 
     int j = Integer.parseInt(string.charAt(i)); 
     this.number = new Number(j); 
     numbers.add(this.number); 
     System.out.println("digit: " + j); 
    } 
} 
0

Eine weitere Option

public static void main(String[] args) { 

    float number = 23.51f; 
    String strNumber = String.valueOf(number).replaceAll("\\D", ""); 
    int[] arrNumber = new int[strNumber.length()]; 

    for (int pos = 0; pos < strNumber.length(); ++pos) { 
     arrNumber[pos] = Integer.valueOf(String.valueOf(strNumber.charAt(pos))); 
     System.out.println(arrNumber[pos]); 
    } 
} 
1

Sie die floatString.format Methode zu String mit 4 Dezimalstellen umwandeln kann, und erhalten dann jedes Zeichen Array int

float floatValue = 12.34567f; 
String str = String.format("%.4f", floatValue); 
// remove the minus, dot, or comma (used in some countries) 
str = str.replaceAll("[-|.|,]", ""); 
int [] nums = new int[str.length()]; 
for (int i=0; i<str.length(); i++) { 
    nums [i] = str.charAt(i) - '0'; 
} 

Hier ist DEMO

Wie bei der letzten Codezeile wird der Dezimalwert '0' char (das ist 48) von einem Dezimalwert von digit char subtrahiert, und das Ergebnis ist ein ganzzahliger Wert dieser Ziffer (wie in der folgenden Tabelle angegeben):
enter image description here

1

Java 8 aromatisierten Lösung:

float number = -7.54f; 
int[] digits = String.format("%.3f", number) 
        .chars() 
        .filter(Character::isDigit) 
        .limit(4L) 
        .map(Character::getNumericValue) 
        .toArray(); 

System.out.println(Arrays.toString(digits)); //=> [7, 5, 4, 0] 
+0

Ich würde mich freuen, wenn der Downvoter erklären könnte, was mit der Antwort nicht stimmt. – beatngu13

Verwandte Themen