薪资转换小学问~

今日份任务:做个薪资转换工具(见图)

(这不是有手就行?)

当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 -

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值