黑马程序员技术交流社区

标题: 分享一个保留小数位的小程序 [打印本页]

作者: 梦里听传说    时间: 2014-8-30 11:23
标题: 分享一个保留小数位的小程序
//给定一个小数,保留该小数的后俩位
import java.util.*;
class baoliuxs
{
        public static void sop(Object obj)
        {
                System.out.print(obj);
        }
        public static void main(String[] args)
        {
               
                String str=bliu01(66.147,3); //给定一个小数
                sop(str);
               
       
        }
        public static String bliu01(double d,int a)
        {       
                if (a<0)
                {
                        throw new RuntimeException("无负数位!");
                }
               
                int num=0;                //定义一个NUM变量并初始化用于判断小数点所在的位置
                String str=d+"";                        //把给定小数转换为字符串
                int pd=0;                                        //定义一个pd变量并初始化用于判断保留小数位是否超过给定小数小数位                                       
                int lin=0;                                        //定义一个ls变量并初始化用于判断超过给定小数位的位数
                int ni=a;                                        //定义一个ni变量并初始化用于超过给定小数位后初始化小数位为最长长度,并用于补位
                char[] ch=str.toCharArray(); //把给定小数字符串转换为字符数组

                ArrayList<Character> s=new ArrayList<Character>(); //定义一个容器用于存储字符数组
                StringBuilder p1=new StringBuilder();                                //定义缓存区用于存储小数点前面的整数
                StringBuilder p2=new StringBuilder();                                //定义缓存区用于存储小数点后面的小数
                StringBuilder p3=new StringBuilder();                                //定义缓存区用于存储补位0
               
                for (int x=0;x<ch.length ;x++ )                                                //把字符数组存储到数组容器内
                {
                        s.add(ch[x]);
                }
                num=s.indexOf('.');                        //判断小数点所在的角标
                pd=s.size()-(num+1);                //计算小数点后面有几位
                if (a>pd)                                        //判断保留位数是否超出给定小数位
                {
                        lin=a-pd;
                        ni=pd;
                }
                       
                for (int x=0;x<num ;x++ )    //将小数点前面的整数存到缓存区
                   {
                           p1.append(s.get(x));
                   }
               
               
                for (int y=num;y<=ni+num ;y++ )        //将小数点后面的整数存到缓存区
                {
                                       
                        p2.append(s.get(y));
                }                       
                 if (!(a==0))
                {
                         if (a<=pd)                                                //判断是否需要补位打印
                                        return "保留后的数为:"+p1.toString()+p2.toString();
                        else
                                {
                                        int cao[]=new int[lin];
                                        for (int z=0;z<cao.length ;z++ )
                                        {
                                                p3.append(cao[z]);
                                        }
                                        return "保留后的数为:"+p1.toString()+p2.toString()+p3.toString();
                                }
                }
                else
                        return "保留后的数为:"+p1.toString();
               
        }
}


作者: Sakuratossi    时间: 2014-8-30 12:17
谢谢分享啊,不过可以用正则表达式做吧
作者: 梦里听传说    时间: 2014-8-30 13:06
Sakuratossi 发表于 2014-8-30 12:17
谢谢分享啊,不过可以用正则表达式做吧

我还没学到正则:#
作者: alee    时间: 2014-8-30 13:07
看看挺好的
作者: dftgg    时间: 2014-8-30 16:57
顶一个 !!!
作者: 天黑偷牛    时间: 2014-8-30 17:55
不错,不错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2