Java convert any integer to 4 digits
Asked Answered
M

2

23

This seems like an easy question. One of my assignments basically sends a time in military format (like 1200, 2200, etc) to my class.

How can I force the integer to be converted to 4 digits when it's received by my class? For example if the time being sent is 300, it should be converted to 0300.

EDIT: it turns out i didnt need this for my problem as i just had to compare the values. Thanks

Maxma answered 11/10, 2011 at 4:28 Comment(0)
T
45

As simple as that:

String.format("%04d", 300)

For comparing hours before minutes:

int time1 =  350;
int time2 = 1210;
//
int hour1 = time1 / 100;
int hour2 = time2 / 100;
int comparationResult = Integer.compare(hour1, hour2);
if (comparationResult == 0) {
    int min1 = time1 % 100;
    int min2 = time2 % 100;
    comparationResult = Integer.compare(min1, min2);
}

Note:

Integer.compare(i1, i2) has been added in Java 1.7, for previous version you can either use Integer.valueOf(i1).compareTo(i2) or

int comparationResult;
if (i1 > i2) {
    comparationResult = 1;
} else if (i1 == i2) {
    comparationResult = 0;
} else {
    comparationResult = -1;
}
Taliataliaferro answered 11/10, 2011 at 4:33 Comment(6)
Yah I thought of that because thats what we used for previous assignments, but thats for strings, in this case the times are integers and they gotta stay as ints cause i need to compare them afterwardsMaxma
Then why the hell should you bother about number of digits in it? Just store it as a regular integer and print it via String.format when you need it to be zero-padded.Taliataliaferro
well i basically have to compare 2 different times from military format and return the smaller one. but its not as simple as if (time<time2) rtrn=time1; else rtrn-time2; because the assignment wants me to make it compare the hour (first 2 digits) and only if the hours are the same then compare the minutesMaxma
so i figured it convert it to 4 digits and then split it after 2 where the first 2 are hour and 2nd 2 are minutes, then i can compare them easilyMaxma
I've modified an answer, but you should modify the question accordingly - you didnt mentioned time comparison, only zero-padding.Taliataliaferro
ahh ok, thank you very much :) I was looking at this problem the wrong wayMaxma
T
1

String a = String.format("%04d", 31200).substring(0, 4);
/**Output: 3120 */ 
System.out.println(a);


String b = String.format("%04d", 8).substring(0, 4);
/**Output: 0008 */
System.out.println(b);
Tasset answered 9/8, 2019 at 6:35 Comment(2)
The accepted answer is good,but not perfect when Integer has more than 4 digits. Such as number 31200.Tasset
What you are trying to accomplish would be the substring. Combining the methods is redundant.Dodie

© 2022 - 2024 — McMap. All rights reserved.