猿问

ThreadLocalRandom double 2 十进制

我尝试只用 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 实例。非常感谢!


呼如林
浏览 170回答 2
2回答

慕哥6287543

由于您正在模拟工资,因此您可以简单地生成int以美分为单位的值,然后除以 100(并转换为双倍)以获得结果。像这样:double&nbsp;salaryPerson&nbsp;=&nbsp;ThreadLocalRandom.current().nextInt(100&nbsp;*&nbsp;1000,&nbsp;100&nbsp;*&nbsp;(10000&nbsp;+&nbsp;1))&nbsp;/&nbsp;100d;这种方法使您免于字符串格式问题,并且如果您希望执行除打印之外的额外操作,还允许您使用精确值处理您的数据。

慕尼黑8549860

有两种方法可以做到这一点,我见过的最常见的方法是基于 C 风格printf。System.out.printf("%.2f", sal);printf使用由%运算符决定的修饰符。这个指定它应该打印f带有 2 个小数位 (the .2) 的浮点数(the )。您可以在此处找到运营商列表。我个人更喜欢 C# 风格 MessageFormatSystem.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){&nbsp; &nbsp; if(USE_PRINTF) { System.out.printf("%.2f", salary.get(i)); }&nbsp; &nbsp; else { System.out.print(MessageFormat.format("{0,number,0.00}", salary.get(i))); }&nbsp; &nbsp; if(i < salary.size() - 1) { System.out.print(", "); }}System.out.println("]");
随时随地看视频慕课网APP

相关分类

Java
我要回答