栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

薪资转换小学问~

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

薪资转换小学问~

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

(这不是有手就行?)

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353504.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号