Java BigDecimal

Sort by

recency

|

503 Discussions

|

  • + 0 comments
        s = Arrays.copyOf(s, n);
        Arrays.sort(s, (a, b) -> new BigDecimal(b).compareTo(new BigDecimal(a)));
    
  • + 2 comments

    I really can't understand why test case 0 is wrong with the code i wrote. It seems that it keeps switching 0.12 with .12 and I don't know why. I would really appreciate if someone could explain it to me.

    import java.math.BigDecimal; import java.util.*; class Solution{

    public static void main(String []args){
        //Input
        Scanner sc= new Scanner(System.in);
        int n=sc.nextInt();
        String []s=new String[n+2];
        for(int i=0;i<n;i++){
            s[i]=sc.next();
        }
        sc.close();
    
      for(int i=1; i<n; i++){
        for(int j=0; j<n; j++){
        BigDecimal bd1 = new BigDecimal(s[i]);
        BigDecimal bd2= new BigDecimal(s[j]);
        int smaller=bd1.compareTo(bd2);
        String tempS;
        if(smaller==0)
            continue;
        else if(smaller==1)
        {
            tempS=s[i];
            s[i]=s[j];
            s[j]=tempS;
    
        }
    
      }
      }
        //Output
        for(int i=0;i<n;i++)
        {
            System.out.println(s[i]);
        }
    }
    

    }

  • + 0 comments
    import java.io.*;
    import java.util.*;
    import java.math.*;
    import java.util.Arrays.*;
    
    class Pair{
        String input;
        BigDecimal value;
        
        public Pair(String input, BigDecimal value){
            this.input = input;
            this.value = value;
        }
    }
    
    public class Solution {
    
        public static List<Pair> quickSort(List<Pair> unsortedList){
            if(unsortedList.size() <= 1)return unsortedList;
            List<Pair> leftList = new ArrayList<Pair>();
            List<Pair> rightList = new ArrayList<Pair>();
            Pair pivot = unsortedList.get(0);
            for(int i = 1; i < unsortedList.size(); i++){
                Pair currentPair = unsortedList.get(i);
                if(currentPair.value.compareTo(pivot.value) > 0)leftList.add(currentPair);
                else rightList.add(currentPair);
            }
            leftList = quickSort(leftList);
            rightList = quickSort(rightList);
            leftList.add(pivot);
            leftList.addAll(rightList);
            return leftList;
        }
    
        public static void main(String[] args) {
            /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            sc.nextLine();
            List<Pair> inputList = new ArrayList<Pair>();
            for(int i = 0; i < n; i++){
                String inputString = sc.nextLine();
                String valueString = inputString;
                if(inputString.charAt(0) == '.')valueString = "0" + inputString;
                BigDecimal value = new BigDecimal(valueString);
                inputList.add(new Pair(inputString, value));
            }
            sc.close();
            inputList = quickSort(inputList);
            for(Pair e : inputList){
                String outputString = e.input;
                System.out.println(outputString);
            }
        }
    }
    
  • + 0 comments

    Java 8+

    s = Arrays.stream(s)
                .limit(n)
                .sorted((a, b) -> new BigDecimal(b).compareTo(new BigDecimal(a)))
                .toArray(String[]::new);
    
  • + 0 comments
    Comparator<String> myComparator = (s1, s2) -> {
                if (s1 == null && s2 == null) return 0;
                if (s1 == null) return 1; // Push nulls to the end
                if (s2 == null) return -1; // Push nulls to the end
                BigDecimal bd1 = new BigDecimal(s1);
                BigDecimal bd2 = new BigDecimal(s2);
                return bd2.compareTo(bd1); // Sort in descending order based on numeric value
            };
            
            Arrays.sort(s,myComparator);