简体   繁体   中英

how to prefix to a primitive data type

here i have a problem. i want a user to input some numbers, then i will convert the input into a string,i will then count the length of the string, and if it is less than 8,i want to add more zeros to the input to make it 8 so that i can do some staff with the number. i have tried to use decimalformat but its not working. plz help .

thanks in advance

int s=Integer.parseInt(s1.readLine());

      String news=String.valueOf(s);
      if(news.length()<8){
          DecimalFormat myformat=new DecimalFormat("00000000");
        String out= myformat.format(s);
        int onth=(Integer.valueOf(out)).intValue();
        s=onth;
      }else{
      System.out.format("your number is: %d\n",s); 

Forget about using the DecimalFormat.

Change your format to the following

System.out.format("your number is: %08d\n",s)

The %08d will lead with zeros, to a width of 8.

This will only display the number in the format you've requested. As stated elsewhere in this thread, treating it as a number would remove the leading zeros.

If you want to store it in a String variable however, you can use

String intString = String.format("%08d", s);

to store it.

  • Update *

As you have a specific need to get a series of numbers between a substring the following code will do what you want.

private static int getSubNumber(int startIndex, int stopIndex, int number) {
    String num = String.format("%08d", number);     
    return Integer.parseInt(num.substring(startIndex, stopIndex));
}

If you pass in the number you want to convert, it will change it to a string, and then convert the substring between the two indexes you pass in back into a number

System.out.println(getSubNumber(2,5,12345678));   // = 345
System.out.println(getSubNumber(2,5,12345));      // = 12
System.out.println(getSubNumber(2,5,123));        // = 0

This is non inclusive, getSubNumber(2,5,...) gets values at position 2,3 and 4 NOT 5.

For your example of 144, use start index 2, stop index 6 for positions 2, 3, 4 and 5

System.out.println(getSubNumber(2,6,144));        // = 1

Even if you prefix an int with zeros the actual value will change to the original value. If you want padding you'll have to go with string. The out variable will give you the result.

Update based on comment

import java.util.Scanner;

public class SquareSubString {

    public static void main(String[] args) {
        String userInputSquare = getSquaredInput();
        int digits2to5 = Integer.parseInt(userInputSquare.substring(2, 6));
        System.out.println("Squre of digits 2 to 5 is : " + (digits2to5 * digits2to5));
    }

    private static String getSquaredInput() {
        System.out.println("Enter a number : ");
        Scanner in = new Scanner(System.in); 
    int input = in.nextInt();
    in.close();
        return String.format("%08d", (input * input));
    }

}

If you need to add 0 after the value, you can multiply it by 10 pow the number of missing 0:

int result = Integer.parseInt(news);
if(news.length()<8){
    int diff = 8 - news.length();
    result = result * Math.pow(10, diff);    // ==> result = result * 10^(8 - news.length())
}

I think that's the simpliest way to do that.

Edit Ahhh, yes... There is prefix in the question. Nevermind!

DecimalFormat is to format numbers in the way we give the pattern.

And to append zeros, please follow this: Add leading zeroes to a string

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM