Java实现提取double类型数值小数点后前三位数字
问题:提取double数值小数点后前三位数字
我刚学了截断、数值类型转换、取模运算这些基础数学和Java操作,现在要实现两个需求:
- 输入一个double类型数值,提取并输出小数点后的前三位数字,比如输入234.555输出555,输入253.6324673输出632
- 另一种输出格式要求数字间用空格分隔,比如输入67.3424输出3 4 2
已有Java输入框架,需要补充提取逻辑的代码:
import java.util.Scanner; class U1_L6_Activity_Three { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //new scanner System.out.println("Please input a decimal number: "); //prompts user to input decimal number //all the math stuff that i dont know how to do } }
解决方案
用已学知识点实现的核心步骤
- 分离小数部分:用取模运算
input % 1,直接得到输入值的纯小数部分(比如234.555%1=0.555) - 放大转换为整数:把小数部分乘以1000,让前三位小数变成整数部分(0.555*1000=555.0)
- 截断取整:通过强制类型转换为
int,自动截断掉后面的小数,得到前三位数字组成的整数 - 拆分输出空格分隔格式:用除法和取模拆分整数的每一位,再用空格拼接输出
完整实现代码
import java.util.Scanner; class U1_L6_Activity_Three { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("Please input a decimal number: "); double input = scanner.nextDouble(); // 1. 取模分离小数部分 double decimalPart = input % 1; // 2. 放大后强制类型转换(截断)得到前三位数字的整数 int threeDigits = (int)(decimalPart * 1000); // 输出第一种格式:连写的三位数字 System.out.println("Truncated three digits: " + threeDigits); // 拆分数字,准备空格分隔输出 int first = threeDigits / 100; // 取百位数字 int second = (threeDigits / 10) % 10; // 取十位数字 int third = threeDigits % 10; // 取个位数字 // 输出第二种格式:空格分隔 System.out.println("Digits with spaces: " + first + " " + second + " " + third); scanner.close(); } }
关键代码说明
input % 1:利用取模运算直接剥离整数部分,只保留小数,是你学过的取模运算的典型用法(int)(decimalPart * 1000):强制类型转换为int时会自动截断小数部分,就是你学的截断操作,刚好保留前三位小数对应的整数- 拆分数字时,
threeDigits / 100通过整数除法得到百位,(threeDigits /10)%10先取前两位再取模得到十位,threeDigits%10直接取模得到个位,全程用了已学的除法和取模运算
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

