金额为0.1 个数为10时会出错 原因是bound的值有可能为0 如何解决?
这个问题导致的主要原因是浮点类型不精确的导致的,不妨打印for循环中的各个数值,后边有很长的尾巴,所以要把这些浮点数控制在2位小数以内,利用Math.round函数解决。我的代码如下,同时去掉了bound那个语句,感觉没有必要。
package com.sql.test;
import java.math.BigDecimal;
import java.util.Random;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
System.out.println("-----微信发红包开始啦-----");
Scanner sc = new Scanner(System.in);
System.out.println("请输入红包金额:");
double total = sc.nextDouble();
System.out.println("请输入红包个数:");
int bigCount = sc.nextInt();
double min = 0.01;
Random c = new Random();
for(int i=1;i<bigCount;i++){
/**
* 此次红包可以输入的最大金额=可用金额-(红包总数-已发的红包)*0.01;
*/
double max = total - (bigCount-i)*min;
//Math.round的存在意义是将浮点数不精确的部分精确到小数点2位,解决0.1对应10个包的极端问题。
max=(double)Math.round(max*100)/100;
//double bound = max - min;
double safe = (double)c.nextInt((int)(max*100))/100;
safe=(double)Math.round(safe*100)/100;
double money = safe + min;
money=(double)Math.round(money*100)/100;
total = total - money;
total=(double)Math.round(total*100)/100;
System.out.println("第"+i+"个红包的金额是"+String.format("%.2f", money)+"元");
}
System.out.println("第"+bigCount+"个红包的金额是"+String.format("%.2f", total)+"元");
}
}
7 六月 2025 | ||||||
---|---|---|---|---|---|---|
21:0021:0521:1021:1521:2021:2521:3021:3521:4021:4521:5021:55 | ||||||
今日 |
7 六月 2025 | ||||||
---|---|---|---|---|---|---|
0:001:002:003:004:005:006:007:008:009:0010:0011:0012:0013:0014:0015:0016:0017:0018:0019:0020:0021:0022:0023:00 | ||||||
今日 |
六月 2025 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 1 | 2 | 3 | 4 | 5 |
今日 |
2025 | ||||||
---|---|---|---|---|---|---|
一月二月三月四月五月六月七月八月九月十月十一月十二月 | ||||||
今日 |
2020-2029 | ||||||
---|---|---|---|---|---|---|
201920202021202220232024202520262027202820292030 | ||||||
今日 |
7 六月 2025 | ||||||
---|---|---|---|---|---|---|
21:0021:0521:1021:1521:2021:2521:3021:3521:4021:4521:5021:55 | ||||||
今日 |
7 六月 2025 | ||||||
---|---|---|---|---|---|---|
0:001:002:003:004:005:006:007:008:009:0010:0011:0012:0013:0014:0015:0016:0017:0018:0019:0020:0021:0022:0023:00 | ||||||
今日 |
六月 2025 | ||||||
---|---|---|---|---|---|---|
日 | 一 | 二 | 三 | 四 | 五 | 六 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 1 | 2 | 3 | 4 | 5 |
今日 |
2025 | ||||||
---|---|---|---|---|---|---|
一月二月三月四月五月六月七月八月九月十月十一月十二月 | ||||||
今日 |
2020-2029 | ||||||
---|---|---|---|---|---|---|
201920202021202220232024202520262027202820292030 | ||||||
今日 |