浮点数的精确度问题


题目:
分别获取数字的整数部分、小数部分,如15.12,整数部分为15,小数部分为0.12

 1 package my_package;
 2 
 3 public class Divide {
 4     public static void main(String[] args) {
 5         double num = 12.345;
 6         //也可以指定调用的方法为static  
 7         Divide d = new Divide();
 8 
 9         //第一种
10         String[] arr1 = d.divide_1(num);
11         System.out.print("整数部分:" + arr1[0] + "   ");
12         System.out.println("小数部分:" + arr1[1]);
13 
14         //第二种
15         String[] arr2 = d.divide_2(num);
16         System.out.print("整数部分:" + arr2[0] + "   ");
17         System.out.println("小数部分:" + arr2[1]);
18     }
19 
20     //将整数、小数拆分为数值,再放在一个字符串数组中返回。但由于计算机表示浮点数时有误差,所以小数部分并不精确
21     public String[] divide_1(double num){
22         //获取整数部分
23         int zhengshu=(int)num;
24         //获取小数部分
25         double xiaoshu=num-zhengshu;
26         //放在字符串数组中返回
27         String[] arr={String.valueOf(zhengshu),String.valueOf(xiaoshu)};
28         return arr;
29     }
30 
31     // 转换为字符串,利用小数点分割,完全精确
32     public String[] divide_2(double num){
33         String str=String.valueOf(num);
34         //小数点位置
35         int index=str.indexOf(".");
36         String zhengshu=str.substring(0,index);
37         String xiaoshu="0."+str.substring(index+1);
38         return new String[]{zhengshu,xiaoshu};
39     }
40 }

猜你喜欢

转载自www.cnblogs.com/chy18883701161/p/10852076.html