A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦里听传说 中级黑马   /  2014-8-30 11:23  /  2347 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//给定一个小数,保留该小数的后俩位
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();
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
天黑偷牛 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
谢谢分享啊,不过可以用正则表达式做吧
回复 使用道具 举报
Sakuratossi 发表于 2014-8-30 12:17
谢谢分享啊,不过可以用正则表达式做吧

我还没学到正则:#
回复 使用道具 举报
看看挺好的
回复 使用道具 举报
顶一个 !!!
回复 使用道具 举报
不错,不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马