今日份任务:做个薪资转换工具(见图)
(这不是有手就行?)
当System.in.read()已经满足不了我了的时候……第一反应是去自己实现byte转数字,但是……我……我懒。嗯。(我就想读个数进来啊哭,找个函数都找不着[○・`Д´・ ○])
前人栽树,后人乘凉。
人还是要多看看外面的世界啊(猝不及防):
参考资料:Java程序中如何输入数据_innocence的博客-CSDN博客_java怎么输入
借助Scanner居然这么简单??学废了学废了。
虽然很简单,但还是想提一下格式——
import java.util.Scanner;
Scanner in = new Scanner(System.in);
// * * = in.next*()
然后输入in.next,就会发现一片新大陆↓
问:为什么要带next?
答:因为可能还会有next的next。
好吧,我承认这句话很链表,但是事实就是如此——输入要等按到回车才会开始读取,所以如果输入多个数据,那就会存在“next的next”。
这也是为什么会有这些hasNext函数们——
测个试:
Scanner in = new Scanner(System.in);
int temp = in.nextInt();
System.out.println(temp);
if (in.hasNextInt())
System.out.println("has next int");
else
System.out.println("no next int");
//
// 输入:
// 23 ccc
// 输出:
// 23
// no next int
//
// 输入:
// 2378 28
// 输出:
// 2378
// has next int
然后,为了输出更美观更强大更高档更上档次更牛逼更帅气——
引入java.text.DecimalFormat类来助我一臂之力——###自动填充,0自动补全,看一串代码观察一下就懂啦——
DecimalFormat[] test = new DecimalFormat[6];
double[] num = new double[6];
test[0] = new DecimalFormat("#####.###"); num[0] = 1;
test[1] = new DecimalFormat("00000.###"); num[1] = 2;
test[2] = new DecimalFormat("##,##.###"); num[2] = 234.5;
test[3] = new DecimalFormat("##,##.000"); num[3] = 6.9;
test[4] = new DecimalFormat("##,##.00#"); num[4] = 34.5;
test[5] = new DecimalFormat("##,##.00#"); num[5] = 0;
for (int i = 0; i < 6; i++) {
System.out.println(test[i].format(num[i]));
}
输出结果:
1
00002
2,34.5
6.900
34.50
.00
然后是字符串的连接——为了实现任意位数的格式输出(虽然好像但是有可能用不上)。
先上基础知识:
String s = "sa~".concat("stringb");
// 等效于
String s = "sa~stringb";
不如直接上代码吧~还有的话就在注释里说啦↓
import java.text.DecimalFormat;
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
// 界面
System.out.println("***薪资转换工具v1.0***");
System.out.print("请输入月薪(人民币):");
// 输入月薪
Scanner in = new Scanner(System.in);
double months = in.nextDouble();
// 计算日薪和年薪
double days = months / 22;
double years = months * 13;
// 计算薪资格式输出分隔符的数量
int count_days = 0, count_years = 0;
for (double tmp = days; tmp >= 1; tmp /= 10) {
++count_days;
}
for (double tmp = years; tmp >= 1; tmp /= 10) {
count_years += 1;
} // 先得到位数,再根据位数来计算需要的分隔符数量
count_days = (count_days - 1) / 3;
count_years = (count_years - 1) / 3;
// 从个位数开始,每多3位需要加一个分隔符,故先减一再整除三
// 第一个0保证日薪小于¥1时能够输出前缀0
String s3 = "##0.00", s2 = "###,", s1 = "¥";
// 根据薪资的位数决定输出格式
String s_days = s3, s_years = s3;
// 分隔符及其相邻位的格式
for (int i = 0; i < count_days; ++i) {
s_days = s2.concat(s_days);
}
for (int i = 0; i < count_years; ++i) {
s_years = s2.concat(s_years);
}
// 加上¥前缀
s_days = s1.concat(s_days); s_years = s1.concat(s_years);
// 按照格式输出计算的结果
DecimalFormat df_days = new DecimalFormat(s_days);
DecimalFormat df_years = new DecimalFormat(s_years);
System.out.printf("您的日薪:");
System.out.println(df_days.format(days));
System.out.printf("您的年薪:");
System.out.println(df_years.format(years));
// 大功告成,happily return~
return;
}
}
最后,看几组测试数据体会体会吧:
参考资料:Java中string类concat方法和+的区别_moxiaomo0804的博客-CSDN博客
- END -