判断数值有效位数的Java工具类详解编程语言

public class AdjustmentDouble{   
    /**  
     * @param s 需处理的数据  
     * @param numOfIntPart 整数位数  
     * @param numOfDecimalPart 小数位数  
     * @return 处理过的数据  
     */   
    public static String adjustDouble(String s,int numOfIntPart,int numOfDecimalPart){   
       
        //按小数点的位置分割成整数部分和小数部分   
        String[] array = s.split("//.");   
        char[] tempA=new char[numOfIntPart];   
        char[] tempB=new char[numOfDecimalPart];   
        //整数部分满足精度要求(情况1)   
        if(array[0].length()==numOfIntPart){   
            //直接获取整数部分长度字符   
            for(int i=0;i<array[0].length();i++){   
                tempA[i]=array[0].charAt(i);       
            }   
            //小数部分精度大于或等于指定的精度   
            if(numOfDecimalPart<=array[1].length()){   
                for(int i=0;i<numOfDecimalPart;i++){   
                    tempB[i]=array[1].charAt(i);   
                       
                }   
            }   
            //小数部分精度小于指定的精度   
            if(numOfDecimalPart>array[1].length()){   
                for(int i=0;i<numOfDecimalPart;i++){   
                    if(i<array[1].length()){   
                        tempB[i]=array[1].charAt(i);   
                    }else{   
                        tempB[i]='0';   
                    }   
                       
                       
                }   
            }   
            if(numOfDecimalPart==0){   
                return String.valueOf(tempA)+String.valueOf(tempB);   
            }   
            return String.valueOf(tempA)+"."+String.valueOf(tempB);   
        }   
           
        //整数部分位数大于精度要求(情况2)   
                if(array[0].length()>numOfIntPart){   
                    //先倒序获取指定位数的整数   
                    for(int i=array[0].length()-1,j=0;(i>=array[0].length()-numOfIntPart)&&(j<numOfIntPart);i--,j++){   
                        tempA[j]=array[0].charAt(i);   
                        System.out.println(tempA[j]);   
                    }   
                    char[] tempA1=new char[numOfIntPart];   
                    //调整顺序   
                    for(int j=0,k=tempA.length-1;j<numOfIntPart&&(k>=0);j++,k--){   
                        tempA1[j]=tempA[k];   
                        System.out.println("tempA1[j]"+tempA1[j]);   
                           
                    }   
                    //小数部分精度大于或等于指定的精度   
                    if(numOfDecimalPart<=array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            tempB[i]=array[1].charAt(i);   
                               
                        }   
                           
                    }   
                    //小数部分精度小于指定的精度   
                    if(numOfDecimalPart>array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            if(i<array[1].length()){   
                                tempB[i]=array[1].charAt(i);   
                            }else{   
                                tempB[i]='0';   
                            }   
                               
                               
                        }   
                    }   
                       
                    return String.valueOf(tempA1)+"."+String.valueOf(tempB);   
                }   
                   
                   
                //整数部分满足精度要求(情况3)   
                if(array[0].length()==numOfIntPart){   
                    //直接获取整数部分长度字符   
                    for(int i=0;i<array[0].length();i++){   
                        tempA[i]=array[0].charAt(i);       
                    }   
                    //小数部分精度小于指定的精度   
                    if(numOfDecimalPart>array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            if(i<array[1].length()){   
                                tempB[i]=array[1].charAt(i);   
                            }else{   
                                tempB[i]='0';   
                            }   
                               
                               
                        }   
                    }   
                       
                    //小数部分精度大于或等于指定的精度   
                    if(numOfDecimalPart<=array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            tempB[i]=array[1].charAt(i);   
                               
                        }   
                           
                    }   
                    if(numOfDecimalPart==0){   
                        return String.valueOf(tempA)+String.valueOf(tempB);   
                    }   
                    return String.valueOf(tempA)+"."+String.valueOf(tempB);   
                }   
                   
                //整数部分大于精度要求(情况4)   
                if(array[0].length()>numOfIntPart){   
                    //先倒序获取指定位数的整数   
                    for(int i=array[0].length()-1,j=0;(i>=array[0].length()-numOfIntPart+1)&&(j<numOfIntPart);i--,j++){   
                        //System.out.println("<<<<"+(i-array[0].length()+1));   
                        tempA[j]=array[0].charAt(i);   
                    }   
                    char[] tempA1=new char[numOfIntPart];   
                    //调整顺序   
                    for(int j=0,k=tempA.length-1;j<numOfIntPart&&(k>=0);j++){   
                        tempA1[j]=tempA[k];   
                        k--;   
                    }   
                       
                    //小数部分精度小于指定的精度   
                    if(numOfDecimalPart>array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            if(i>=array[1].length()){   
                                tempB[i]='0';   
                                   
                            }else{   
                                tempB[i]=array[1].charAt(i);   
                            }   
                               
                               
                        }   
                    }   
                    //小数部分精度大于或等于指定的精度   
                    if(numOfDecimalPart<=array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            tempB[i]=array[1].charAt(i);   
                               
                        }   
                           
                    }   
                       
                    if(numOfDecimalPart==0){   
                        return String.valueOf(tempA1)+String.valueOf(tempB);   
                    }   
                    return String.valueOf(tempA1)+"."+String.valueOf(tempB);   
                }   
                   
                   
                   
                   
                   
                   
                //整数部分小于精度要求(情况5)   
                if(array[0].length()<numOfIntPart){   
                    //先倒序获取指定位数的整数   
                    char[] tempA1=new char[numOfIntPart];   
                    for(int i=array[0].length()-1,j=0;(i>=numOfIntPart-array[0].length()-(numOfIntPart-array[0].length()))&&(j<numOfIntPart);i--,j++){   
                        tempA1[j]=array[0].charAt(i);   
                        System.out.println("<<<<<<tempA1[j]"+tempA1[j]);   
                    }   
                           
                    //补0   
                    for(int i=array[0].length();i<array[0].length()+numOfIntPart-array[0].length();i++){   
                        tempA1[i]='0';   
                           
                        System.out.println("<<<<<<"+tempA1[i]);   
                    }   
                       
                    char[] tempA2=new char[numOfIntPart];   
                    //调整顺序   
                    for(int j=0,k=tempA1.length-1;j<numOfIntPart&&(k>=0);j++){   
                        tempA2[j]=tempA1[k];   
                        k--;   
                    }   
                    //小数部分精度小于指定的精度   
                    if(numOfDecimalPart>array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            if(i<array[1].length()){   
                                tempB[i]=array[1].charAt(i);   
                            }else{   
                                tempB[i]='0';   
                            }   
                               
                               
                        }   
                    }   
                    //小数部分精度大于或等于指定的精度   
                    if(numOfDecimalPart<=array[1].length()){   
                        for(int i=0;i<numOfDecimalPart;i++){   
                            tempB[i]=array[1].charAt(i);   
                               
                        }   
                           
                    }   
                    if(numOfDecimalPart==0){   
                        return String.valueOf(tempA2)+String.valueOf(tempB);   
                    }   
                    return String.valueOf(tempA2)+"."+String.valueOf(tempB);   
                }   
                   
                   
                //情况(6)   
                if((array[0].length()<numOfIntPart)&&(array[1].length()<numOfDecimalPart)){   
                    for(int i=0; i< numOfIntPart-array[0].length(); i++){   
                        s = "0"+s ;   
                    }   
                       
                       
                    for(int i = 0 ; i < numOfDecimalPart -array[1].length() ; i++){   
                        s = s+"0" ;   
                    }   
                    return s;   
                }   
                   
               
                   
                   
                   
                   
           
        return null;   
    }   
       
    /**  
     * @param args  
     */   
    public static void main(String[] args) {   
        // TODO Auto-generated method stub   
        String s = "1234.123";   
        s = AdjustmentDouble.adjustDouble(s, 5, 6);   
        System.out.println(s);   
           
    }   
   
}  

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/10919.html

(0)
上一篇 2021年7月19日 10:32
下一篇 2021年7月19日 10:32

相关推荐

发表回复

登录后才能评论