方一:直接类型转换,再加减,问题是类型转换导致的小数位数精确度变化,目前没找到解决方法
方二:转换成字符串后运用.split方法直接从小数点处切分
方三:转换成字符串后,标记小数点位置后,用substring方法分别构造两个子字符串
注意点:
//三种方法 //负数和正数的整数情况需要分开考虑 import java.util.*; public class Split { public static void main(String[] args) { float num,b; int a,pointIndex; Scanner s = new Scanner(System.in); System.out.println("请输入一个float数:"); num = s.nextFloat(); // 判断正负 if(num >=0) { // 正数部分计算 // 方法一:直接转换数字类型后加减,问题是转换类型会导致小数部分变化,不知道怎么解决!! a = (int) num; b = num - a; System.out.println(num + "整数部分:" + a); System.out.println(num + "小数部分:" + b); // 方法二:转换成字符串,用方法split按小数点前后分割 String str = String.valueOf(num); //将float类型转换成字符串 String[] ary = str.split("\\."); System.out.println(num + "整数部分为:" + ary[0]); System.out.println(num + "小数部分为:" + "0." + ary[1]); // 方法三:同样转换成字符串,用方法indexOf标记小数点位置 pointIndex = str.indexOf('.'); System.out.println(num + "的整数部分为:" + str.substring(0,pointIndex)); System.out.println(num + "的小数部分为:" + "0" + str.substring(pointIndex,str.length())); } // 负数部分计算,注意,-1.7的正数部分是-2,小数部分是0.3 else { // 方一 a = (int) num - 1; b = num - a; System.out.println(num + "整数部分:" + a); System.out.println(num + "小数部分:" + b); // 方二 String str = String.valueOf(num); //将float类型转换成字符串 String[] ary = str.split("\\."); a = Integer.parseInt(ary[0]) -1; b = 1 - Float.parseFloat("0." + ary[1]); //需要计算,再次转换成float类型 System.out.println(num + "整数部分为:" + a); System.out.println(num + "小数部分为:" + b); // 方三 pointIndex = str.indexOf('.'); a = Integer.parseInt(str.substring(0,pointIndex)) -1; b = 1 - Float.parseFloat("0" + str.substring(pointIndex)); System.out.println(num + "的整数部分为:" + a); System.out.println(num + "的小数部分为:" + b); } } }
这一题非常适合后面做按钮练习
Math.ceil() //只要有小数都+1
Math.floor() //不取小数
Math.round() //四舍五入
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。