判斷數值有效位數的Java工具類

f25p 9年前發布 | 2K 次閱讀 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);  

}  

} </pre>

 本文由用戶 f25p 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!