为了账号安全,请及时绑定邮箱和手机立即绑定

ThreadLocalRandom double 2 十进制

ThreadLocalRandom double 2 十进制

呼如林 2021-08-19 18:39:29
我尝试只用 2 位小数打印我的 Array Double。但我在谷歌找不到怎么办。请任何帮助?package com.company;import java.util.ArrayList;import java.util.concurrent.ThreadLocalRandom;public class java_05_16_05_01 {    public static void main(String[] args){        ArrayList<Double> salary=new ArrayList<Double>();        int NumberPersonSurveyed = ThreadLocalRandom.current().nextInt(1, 10+1);        for(int i=0; i<NumberPersonSurveyed; i++){            double salaryPerson = ThreadLocalRandom.current().nextDouble(1000, 10000+1);            salary.add(salaryPerson);        }        System.out.println(salary);    }}实际上输出是:[9803.056390825992, 2753.180103177606, 2602.5359323328644, 3319.2942269101018]但我期望:[9803.056, 2753.18, 2602.53, 3319.29]注意我想使用 Math.random 或类似的 ThreadLocalRandom 实例。非常感谢!
查看完整描述

2 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

由于您正在模拟工资,因此您可以简单地生成int以美分为单位的值,然后除以 100(并转换为双倍)以获得结果。像这样:

double salaryPerson = ThreadLocalRandom.current().nextInt(100 * 1000, 100 * (10000 + 1)) / 100d;

这种方法使您免于字符串格式问题,并且如果您希望执行除打印之外的额外操作,还允许您使用精确值处理您的数据。


查看完整回答
反对 回复 2021-08-19
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

有两种方法可以做到这一点,我见过的最常见的方法是基于 C 风格printf。


System.out.printf("%.2f", sal);

printf使用由%运算符决定的修饰符。这个指定它应该打印f带有 2 个小数位 (the .2) 的浮点数(the )。您可以在此处找到运营商列表。


我个人更喜欢 C# 风格 MessageFormat


System.out.println(MessageFormat.format("{0,number,0.00}", sal));

MessageFormat后端 off of DecimalFormatwhich 表示#和上下文中的数字0,其中 a#表示潜在但不是必需的数字,而 a0表示必需的数字。也就是说,如果您传入10指定的格式,它将打印10.00.


编辑:


刚刚意识到它是一个 ArrayList;您将不得不遍历数组的每个成员并单独打印它们。


boolean USE_PRINTF = false;

System.out.print("[");

for(int i = 0; i < salary.size(); ++i)

{

    if(USE_PRINTF) { System.out.printf("%.2f", salary.get(i)); }

    else { System.out.print(MessageFormat.format("{0,number,0.00}", salary.get(i))); }

    if(i < salary.size() - 1) { System.out.print(", "); }

}

System.out.println("]");


查看完整回答
反对 回复 2021-08-19
  • 2 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信