您的位置 首页 > 数码极客

如何将浮点数转换为字符串如何把浮点数转换成字符串…

模拟拼手气红包

* 对于指定总金额以及红包个数,可以生成不同金额的红包,

*,每个红包金额随机生成。

* 分析这个题目:

* 1.首先需要一个分发红包的方法.输入的参数是 总金额 以及 红包个数.

* 按照这两个参数生成不同金额的(double)类型的红包,存放进ArrayList中.

* 2.然后需要抢红包的方法.直接就可以从ArrayList中随机拿走一个红包

* 3.只要是一个人,就能发红包和 抢红包,那么发红包和抢红包是属于人类的一种基本行为.

* 当然只要账户里有钱,就可以发没钱提示"没钱"

package HongBaoAnLi; import java.ma; import java.u; import java.u; import static java; /* * 在红包案例中,人具备两种属性:姓名/钱 * 人具备两种行为.查看用户的余额/收红包/发红包 * */ public class Person { //成员属性 private String name; private double money; //成员行为 //显示我有多少钱 public void show(){ Sy("用户名:%s 账户余额%f\n",name,money); } //发红包行为 /* * 分发红包思路: * * 步骤1. 该分发红包的方法接受两个参数:红包总金额totalMoney,红包拆分的个数count * 如果红包金额存在小数,需要将小数位分离出来,分成整数部分 MoneyInt 和 小数部分 decimalPart. * 步骤2. 将总金额分成N个红包,那我们先包好N-1个红包,每个红包随机赋予(0,MoneyInt)之间的值 * 步骤3. 然后用金额上限/红包总额 得到一个系数. * 步骤4. 将每个红包的值 * 系数 = 每个红包的实际值 * 红包1:1*0.666=0.666 红包2:2*0.666 = 1.333 红包3:3*0.666=1.999 * 步骤5. 最后一个红包的值 = 总的红包金额 - 红包1-红包2-红包3 + 步骤一拆分的余数; * * 举例说明:假设totalMoney为10.5,分成3个包.先将10.5拆分成 10 和 0.5 * 以10为基准,随机生成0-10的数字赋给红包1和2,比如红包1的值为4,红包2的值为8 * 10/(4+8) = 0.8333 * 红包1:4*0.8333=3.3333 红包2:8*0.8333=6.666 * 那么红包3的值 = MoneyInt - 红包1 - 红包2 + decimalPart.|| 红包3=10-3.3333-6.666+0.5 =0.5007 * */ public ArrayList<BigDecimal> send(double totalMoney, int count){ /* * 前一个arrayList类型为Double用来划分红包的金额 * 后一个arrayDB用来精确计算,计算数据来源于arrayList的成员.保留两位小数. * 返回BigDecimal类型的集合对象. * */ ArrayList<Double> arrayList = new ArrayList<>(); ArrayList<BigDecimal> araryBD = new ArrayList<>(); //首先看发红包的人有多少钱,钱不足直接提示/退出.钱够了就开始发红包. double leftmoney = (); if (totalMoney>leftmoney) { Sy("对不起您的账户余额不足,请先充值!\n腾讯业务,没钱用你麻痹!"); exit(); } else { Sy("╔═══════════════════════════╗"); Sy("╬ 用户名:[%s]的用户派发了[%.2f]元的口令红包! \n",(),totalMoney); Sy("╬ 请速来领取!! "); Sy("╚═══════════════════════════╝"); } //扣钱,本质就是重新对money属性进行改写 (leftmoney-totalMoney); //发红包拆分成count份数,每份的金额不定 //红包不一定是整数,如果有人非要发带小数的红包,那么我们将小数位分离出来. double decimalPart = totalMoney - (int)totalMoney; //单独分理出小数,就可以直接处理整数部分了.赋给变量moneyInt int moneyInt = (int)(totalMoney); Random ra = new Random(); double temp=0,sumNum=0; /*步骤2. 将总金额分成N个红包,那我们先包好N-1个红包, 每个红包随机赋予(0,MoneyInt)之间的值*/ for (int i = 0; i < count; i++) { temp = (double(moneyInt); arrayLi(temp); sumNum+=temp; } /* * 步骤3. 然后用金额上限/红包总额 得到一个系数.*/ double xishu = moneyInt/sumNum; /*定义与系数运算后的接受变量numAfter/sumAfter */ double numAfter=0,sumAfter=0; for (int i = 0; i < count-1; i++) { /** 步骤4. 将每个红包的值 * 系数 = 每个红包的实际值*/ numAfter = arrayLi(i)*xishu; arrayLi(i,numAfter); //将numAfter传递给BigDecimal类,需要将浮点数转换成字符串 String str = numAfter+""; BigDecimal decimal = new BigDecimal(str); BigDecimal setScale1 = decimal.setScale(2,BigDecimal.ROUND_HALF_UP); //将decimal添加到BigDecimal类的集合中 araryBD.add(setScale1); sumAfter+=numAfter; } //初始化最后一个红包的值为0 double finalNum =0; /*步骤5. 最后一个红包的值 = 总的红包金额 - 红包1-红包2-红包3 + 步骤一拆分的余数;*/ finalNum = (double)moneyInt-sumAfter+decimalPart; // arrayLi(count-1,finalNum); /*将最后一个红包的值转换为String类型的对象,然后传递给BigDecimal * 用过setScale();方法将结果保留两位小数,采用ROUND_HALF_UP参数,也就是所谓的四舍五入. * */ String strFinal = finalNum+""; BigDecimal decima2 = new BigDecimal(strFinal); BigDecimal setScale2 = decima2.setScale(2,BigDecimal.ROUND_HALF_UP); /*将四舍五入后的结果添加到arrayBD中*/ araryBD.add(setScale2); Sy(" 使用BigDecimal"); Sy(araryBD); return araryBD; } //收红包方法 public void receiver(ArrayList<BigDecimal> list){ //从多个红包重随机抽取一个给自己 //随机获取一个集合当中的索引编号 int index = new Random().nextIn()); //将BigDecimal转换成deouble类型数据 double tempValue = li(index).doubleValue(); Sy("用户名为:[%s]的用户抢到了[%.2f]元!,抢之前的余额为[%.2f]",(),tempValue,()); // Sy("\t\t红包号为%d内容%.2f元!\n",++numCount,tempValue); //删除索引的元素 li(index); //当前成员自身有的钱 double money = getMoney(); //将得到的红包 + 自身当前 (money+tempValue); Sy("\t抢之后的余额为[%.2f]\n",money+tempValue); } //构造方法 public Person() { } public Person(String name, int money) { = name; = money; } //getter和setter方法 public String getName() { return name; } public void setName(String name) { = name; } public double getMoney() { return money; } public void setMoney(double money) { = money; } } package HongBaoAnLi; import java.ma; import java.u; /* *//* * 模拟拼手气红包: * 对于指定总金额以及红包个数,可以生成不同金额的红包, *,每个红包金额随机生成。 ***************************************************( * 分析这个题目: * 1.首先需要一个分发红包的方法.输入的参数是 总金额 以及 红包个数. * 按照这两个参数生成不同金额的(double)类型的红包,存放进ArrayList中. * 2.然后需要抢红包的方法.直接就可以从ArrayList中随机拿走一个红包 * 3.是个人,就能发红包和 抢红包,那么发红包和抢红包是属于人类的一种基本行为. * 当然只要账户里有钱,就可以发.没钱提示"腾讯红包,没钱玩你麻痹" * * */ public class MainClass { public static void main(String[] args) { Sy("\n======抢红包之前======"); Person manager = new Person("管理员",500); Person member1 = new Person("成员A",0); Person member2 = new Person("成员B",0); Person member3 = new Person("成员C",0); Person member4 = new Person("成员D",0); /*显示出当前所有成员的状态信息:用户名以及剩余金额.*/ manager.show(); member1.show(); member2.show(); member3.show(); member4.show(); Sy("\n======抢红包之后======"); /*调用send(totalMoney,couunt)方法发红包,传递的两个参数分别为红包的总金额,红包划分的个数.*/ ArrayList<BigDecimal> redList = manager.send); /*调用receiver(ArrayList redList)方法抢红包,该方法自带显示金额等信息直接调用就可以看到结果.*/ manager.receiver(redList); member1.receiver(redList); member2.receiver(redList); member3.receiver(redList); member4.receiver(redList); } }

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何将浮点数转换为字符串,如何把浮点数转换成字符串,浮点数转换成字符串的函数,c语言浮点数转换为字符串,整数,浮点数和字符串之间的转换”边界阅读