java如何将一个float型数的整数部分和小数分别输出显示
短信预约 -IT技能 免费直播动态提醒
将一个float型数的整数部分和小数分别输出显示
三种方法
方一:直接类型转换,再加减,问题是类型转换导致的小数位数精确度变化,目前没找到解决方法
方二:转换成字符串后运用.split方法直接从小数点处切分
方三:转换成字符串后,标记小数点位置后,用substring方法分别构造两个子字符串
注意点:
- 负数取整,例 -1.2 的整数部分是 -2,小数部分是0.8
//三种方法
//负数和正数的整数情况需要分开考虑
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);
}
}
}
这一题非常适合后面做按钮练习
java. float 取整
- 向上取整:
Math.ceil() //只要有小数都+1
- 向下取整:
Math.floor() //不取小数
- 四舍五入:
Math.round() //四舍五入
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341