如何获取一个数字的某个小数点位?

问题描述 投票:0回答:1

我想实现RadixSort,并获得一个数字的某一特定小数点位的数字。

 int num (int elem, int place)
      --- if element == 12225 and place == 0
      --- expected output would be 5 (starting to count by right) 
      --- if place == 4 expected output would be 1

我写了这个方法。但它既不能用,也没有效率。

    static int key(int element, int decimalPlace) {
        if (element < 0)
            throw new IllegalArgumentException("invalid argument");
        int tmp = (int) (Math.log10(element) + 1);
        if (decimalPlace > tmp)
            return 0;
        else {
            return Integer.parseInt(String.valueOf(Integer.toString(element).charAt(tmp - decimalPlace)));
        }
    }

我想我应该可以更有效地解决这个问题。

java sorting decimal
1个回答
3
投票

我会这样做。

return ( element / (int) Math.pow(10, decimalPlace) ) % 10

0
投票

你可以用两种方法来解决这个问题:

用字符串运算来表示小数

从十进制字符串中挑选char(数字)表示你的正整数。

int getDigitAtPosition(Integer integer, int zeroBasedPositionFromRight) {
  // raise error if pos < 0 or pos >= length or length == 0
  decimalRepresentation = integer.toString();
  int rightMostPosition = decimalRepresentation.length() - 1;
  int indexOfDigit = rightMostPosition - zeroBasedPositionFromRight;
  char digitChar = decimalRepresentation.charAt(indexOfDigit);

  return Integer.parseInt(digitChar);
}

使用数学(简单步骤)

或者你可以用以下方法计算:(a)用高次幂-10的模数;然后(b)减去低次幂-10(包括其模数);最后(c)除以pos-power-10。

得到1234的正1位数=3。

变成(a)10^(1+1)=100er因数减去。

1200是减去,结果是34

则(b)10^(1-1)=1er减去

4被减去,结果是30

最后(c)整数除以10^(1)(忽略可能的余数)

30 10 = 3 所需数字的数值。

int getDigitAtPosition(Integer integer, int pos) {
  // raise error if pos < 0 or pos >= length or length == 0
  int higherUnit = 10^(pos +1) ; // a
  int higherPart = (integer / higherUnit) * higherUnit;
  int lowerUnit = 10^(pos -1); // b
  int lowerPart = (integer / lowerUnit) * lowerUnit;
  int posUnit = 10^(pos); // c
  int digitAtPosition = (integer - higherPart - lowerPart) / posUnit;

  return digitAtPosition;
}

使用数学(pow和modulo)

看到 相关回答 利用 单元算术:

更一般地,一个数字的第n位可以通过公式获得。(数字基数^(n-1))%基数。


0
投票
class FindDecimalPosition
{
    public static void main (String[] args) throws java.lang.Exception
    {
        System.out.println(getNumber(1234567,0));
        System.out.println(getNumber(1234567,1));
        System.out.println(getNumber(1234567,2));
        System.out.println(getNumber(1234567,3));
        System.out.println(getNumber(1234567,4));
        System.out.println(getNumber(1234567,5));
        System.out.println(getNumber(1234567,6));
    }


    public static int getNumber(int num,int position){
        char [] aux = (num+"").toCharArray();

        if(position >= aux.length || position < 0 || num < 0) throw new IllegalArgumentException("invalid argument");
        return Integer.valueOf((aux[aux.length - position-1]+""));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.