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