How do i find the right most digit of a number integer with java without using number % 10? see the description

我是研究僧i 提交于 2019-12-12 03:54:51

问题


Right now I'm using something like this: Basically the program is supposed to print X (right most digit of a #) to X decimal places for example:

  • entered 3.56, should display 0000000000000003.560
  • entered 56.7 should display: 000000000056.700000
  • entering 1002.5 should display 00000000000001002.50

but number % 10,condition right now only accepts number w/o decimals, so the program closes if i enter a number with decimals I only need an alternative for number % 10.

double number;
if (number % 10 == 1)
System.out.printf("%020.1f\n",number);

回答1:


It seems that you are looking for something like

System.out.printf("%020." + ((int) number) % 10 + "f\n", number);

((int) number) will get rid of fraction making 56.7 -> 56, so now you can safely use %10 to get last digit.

DEMO




回答2:


If I have interpreted your question correctly then this looks like it does what you ask:

public void test() {
  strangePrint(3.1415);
  strangePrint(2.0);
  strangePrint(2.1);
  strangePrint(2.2);
  strangePrint(2.999);
  strangePrint(37.4);
  strangePrint(3.56);
  strangePrint(56.7);
  strangePrint(1002.5);
}

private void strangePrint(double d) {
  // Get the integer part
  int n = (int)d;
  // The last digit of the integer defines the decimal places.
  int digits = n%10;
  System.out.printf("%020."+digits+"f\n", d);
}

prints

0000000000000003.142
00000000000000002.00
00000000000000002.10
00000000000000002.20
00000000000000003.00
000000000037.4000000
0000000000000003.560
0000000000056.700000
00000000000001002.50



回答3:


From number in format:

ABCDEX.FGHI

you can extract X by:

int x = (int) original; //get rid of what is after the decimal point
//now x is ABCDEX
x = x % 10;
//now x is X

now you can join this int with string to create pattern for printf.




回答4:


Based off of your original post, it seemed like you weren't allowed to use mod, so here's how I would do it:

private void transform(Double number)
{
    int result;
    int x = number.intValue();

    if (x < 10)
    {
        result = x;
    }
    else
    {
        Double y = x / 10.0;
        int z = y.intValue();
        result = x-10*z;
    }

    System.out.printf("%020." + result + "f\n", number);
}

Test runs:

transform(3.56);
transform(56.7);
transform(1002.5);  

Prints:

0000000000000003.560
0000000000056.700000
00000000000001002.50

EDIT:
If I misinterpreted and you are allowed to use mod, then the answer is simply:

private void transform(Double number)
{ 
     System.out.printf("%020." + ((int) number) % 10 + "f\n", number);
}

as others have suggested. Sorry if I misunderstood.



来源:https://stackoverflow.com/questions/19737138/how-do-i-find-the-right-most-digit-of-a-number-integer-with-java-without-using-n

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!