A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唯我独赞mo 中级黑马   /  2015-11-11 21:11  /  1636 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,注意定义时要把奖金定义为长整形。求利润是60.0万时,应发放奖金数。
  1. public class test {
  2.         public static void main(String[] args) {
  3.                 double x = 0, y = 0;
  4.                 System.out.print("输入当月利润(万):");
  5.                 Scanner s = new Scanner(System.in);
  6.                 x = s.nextInt();
  7.                 if (x > 0 && x <= 10) {
  8.                         y = x * 0.1;
  9.                 } else if (x > 10 && x <= 20) {
  10.                         y = 10 * 0.1 + (x - 10) * 0.075;
  11.                 } else if (x > 20 && x <= 40) {
  12.                         y = 10 * 0.1 + 10 * 0.075 + (x - 20) * 0.05;
  13.                 } else if (x > 40 && x <= 60) {
  14.                         y = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (x - 40) * 0.03;
  15.                 } else if (x > 60 && x <= 100) {
  16.                         y = 20 * 0.175 + 20 * 0.05 + 20 * 0.03 + (x - 60) * 0.015;
  17.                 } else if (x > 100) {
  18.                         y = 20 * 0.175 + 40 * 0.08 + 40 * 0.015 + (x - 100) * 0.01;
  19.                 }
  20.                 System.out.println("应该提取的奖金是 " + y + "万");
  21.         }

  22. }
复制代码



20 个回复

倒序浏览
奖金不是定义为长整形么,怎么是double了
回复 使用道具 举报
有点意思
回复 使用道具 举报
隔壁马良 发表于 2015-11-11 22:21
奖金不是定义为长整形么,怎么是double了

当时笔试时就是这样写的,对啊,长整形应该是long,多谢指出
回复 使用道具 举报
隔壁马良 发表于 2015-11-11 22:21
奖金不是定义为长整形么,怎么是double了

因为x,y要与小数运算
回复 使用道具 举报
我感觉应该是这样的
回复 使用道具 举报
double有问题吗,计算过程中出现小数了啊
回复 使用道具 举报
刘旭波 发表于 2015-11-12 20:16
double有问题吗,计算过程中出现小数了啊

要求的是长整形,现在写的是浮点型
回复 使用道具 举报
唯我独赞mo 发表于 2015-11-12 14:39
当时笔试时就是这样写的,对啊,长整形应该是long,多谢指出

是不是可以把60万写成600000(类推),直接定义长整形,对运算中对有小数出现的式子进行强制转换符号避免double
回复 使用道具 举报
面试的题目这些吗?
回复 使用道具 举报
ll5353231 发表于 2015-11-12 23:42
面试的题目这些吗?

还有关于数据库的
回复 使用道具 举报
我想说这个题目不科学,为啥到后最,提成是越来越少呢,按照正常的不是越来越高么?
回复 使用道具 举报
是不是可以优化呢,这样做是不是就是像按计算机一样?没有看到代码的智能化
回复 使用道具 举报
小地瓜 发表于 2015-11-13 00:10
我想说这个题目不科学,为啥到后最,提成是越来越少呢,按照正常的不是越来越高么?  ...

这个题目是很早以前的了,一般公司的笔试都是差不多,还有杨辉三角出现的频率也特别高
回复 使用道具 举报
女神 中级黑马 2015-11-13 18:31:42
15#
很六的说    赞一个
回复 使用道具 举报
女神 中级黑马 2015-11-13 19:27:22
16#
本帖最后由 女神 于 2015-11-13 19:41 编辑

package com.heima.Salary;

import java.util.Scanner;

/*
* 企业发放的奖金根据利润提成。
* 利润(I)低于或等于10万元时,奖金可提10%;
* 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
* 20万到40万之间时,高于20万元的部分,可提成5%;
* 40万到60万之间时高于40万元的部分,可提成3%;
* 60万到100万之间时,高于60万元的部分,可提成1.5%,
* 高于100万元时,超过100万元的部分按1%提成,
* 注意定义时要把奖金定义为长整形。求利润是60.0万时,应发放奖金数。
*/
public class Salart_Demo {
        public static void main(String[] args) {
                double profit = getProfit(); //获取录入的利润值(以万为单位)
                long bonus = getBonus(profit);//通过利润获取奖金值(以元为单位)
                System.out.println("员工的利润为" + profit / 10000 + "万元,奖金为" + bonus + "元");
        }
       
        //获取员工利润
        public static double getProfit() {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入代表员工利润的数值(以万为单位,可以有小数)");
                while (true) {
                        try {
                                String s = sc.nextLine();
                                double profit = Double.parseDouble(s);
                                return profit * 10000;
                        } catch (NumberFormatException e) {
                                System.out.println("您的输入有误,请重新输入");
                        }
                }
        }
       
        // 计算奖金
        public static long getBonus(double profit) {
               
                long num = ((Double)profit).longValue() / 10000;                //这里的double不能自动装箱为Double类型调用longValue()方法吗?
                if (num <= 0) {
                        return 0;
                }else if (num > 0 && num <= 10) {
                        return ((Double)(profit * 10 / 100)).longValue();
                }else if (num > 10 && num <= 20) {
                        return getBonus(100000) + ((Double)((profit - 100000) * 75 / 1000)).longValue();
                }else if (num > 20 && num <= 40) {
                        return getBonus(200000) + ((Double)((profit - 200000) * 5 / 100)).longValue();
                }else if (num > 40 && num <= 60) {
                        return getBonus(400000) + ((Double)((profit - 400000) * 3 / 100)).longValue();
                }else if (num > 60 && num <= 100) {
                        return getBonus(600000) + ((Double)((profit - 600000) * 15 / 1000)).longValue();
                }else {
                        return getBonus(1000000) + ((Double)((profit - 1000000) * 1 / 100)).longValue();
                }
        }
       
       
}

回复 使用道具 举报
有用啊  来看看
回复 使用道具 举报
6666666666666666
回复 使用道具 举报
面试成功了吗
回复 使用道具 举报
女神 发表于 2015-11-13 19:27
package com.heima.Salary;

import java.util.Scanner;

定义了两个方法,分别获取利润和奖金,两个类型之间的转换非常好,感谢啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马