Java中分离输入实数的整数与小数部分,如何让小数部分以整数形式正确显示?
Java中分离输入实数的整数与小数部分,如何让小数部分以整数形式正确显示?
嗨,我看你现在的代码已经能实现基本的整数和小数部分分离,但遇到了两个头疼的小问题:一是浮点数精度导致小数部分出现多余的尾数位,二是想把小数部分转成整数形式(比如把0.89变成89)显示对吧?我来给你分享几个实用的解决办法~
首先得说清楚你现在遇到的精度问题为啥会出现:double类型的浮点数是用二进制存储的,像0.89这种十进制小数没法被二进制精确表示,所以计算num - parteentera时得到的是一个近似值,就出现了0.8900000000000006这种奇怪的结果。
下面给你两种靠谱的解决方案:
方法一:字符串直接拆分(最稳妥,完全避免精度问题)
如果你的需求是完全对应用户输入的小数位数,直接把输入当成字符串处理是最省心的,毕竟用户输入的45,89(或者45.89)本身就是明确的整数加小数的结构:
import java.util.Scanner; public class hoja1ej9 { public static void main(String[] args) { Scanner dato = new Scanner(System.in); System.out.println("Ingrese un número real"); // 先读取完整的输入字符串,把逗号替换成点,兼容两种分隔符 String numInput = dato.nextLine().replace(',', '.'); // 按小数点拆分字符串 String[] numParts = numInput.split("\\."); // 处理整数部分 int parteentera = Integer.parseInt(numParts[0]); // 处理小数部分:如果有小数位就转成整数,没有的话默认0 int partedecimal = numParts.length > 1 ? Integer.parseInt(numParts[1]) : 0; System.out.println(parteentera); System.out.println(partedecimal); } }
这个方法的好处是完全跟着用户输入走,输入45,89就直接得到89,不会有任何精度误差,还能兼容逗号和点两种小数分隔符。
方法二:用BigDecimal处理浮点数精度
如果你必须用浮点数进行计算,那可以用BigDecimal来规避double的精度问题,它能精确处理十进制小数:
import java.math.BigDecimal; import java.util.Scanner; public class hoja1ej9 { public static void main(String[] args) { Scanner dato = new Scanner(System.in); System.out.println("Ingrese un número real"); double num = dato.nextDouble(); // 把double转成BigDecimal时,一定要用字符串构造,避免精度损失 BigDecimal numBig = new BigDecimal(String.valueOf(num)); // 提取整数部分(直接截断小数) BigDecimal parteenteraBig = numBig.setScale(0, BigDecimal.ROUND_DOWN); // 计算小数部分 BigDecimal partedecimalBig = numBig.subtract(parteenteraBig); // 假设我们要保留两位小数,把小数部分转成整数就乘以100 int partedecimal = partedecimalBig.multiply(new BigDecimal(100)).intValue(); int parteentera = parteenteraBig.intValue(); System.out.println(parteentera); System.out.println(partedecimal); } }
这个方法适合需要对数值进行后续计算的场景,BigDecimal能帮你精确处理小数运算,不会出现奇怪的尾数位。如果你的小数位数不固定,也可以把BigDecimal转成字符串后再拆分,结合第一种方法的思路。
总结一下:如果只是想准确获取用户输入的整数和小数部分,优先用字符串拆分的方法;如果需要进行数值计算,就用BigDecimal来处理精度问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

