如何通过格式化将双精度数转两位小数,然后使用数字?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过格式化将双精度数转两位小数,然后使用数字?相关的知识,希望对你有一定的参考价值。

我目前正在制作一个程序,生成一个随机数,然后计算20美元,1美元,四分之一,便士等数量,以赚取该数字。这是我用来计算双倍的,randomValue是随机双。

double rangeMin = 1;
double rangeMax = 100;
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin ) * r.nextDouble();

我的问题是它一直给我一个16位小数的双倍,所以我尝试使用格式化程序

Formatter fmt = new Formatter();
fmt.format("%.2f", x);

(它的x因为我通过参数将randomValue发送到另一个类)

现在我的大问题是我无法使用我格式化的数字。例如,我不能在if语句中使用它,因为它给了我一个错误

    if(fmt > 1000) {
    System.out.print("it worked");
}

我知道我不能将Formatter与int进行比较,就像我无法比较字符串和long,但是如何获得我格式化的随机双数或以某种方式将其更改为双重以便我可以使用它?

答案

更容易的是将所有东西乘以100并使用便士计算所有东西。这样你就不必处理浮点和它的问题。您仍然可以以不同的方式显示它,只需用便士和整数进行所有计算。这是一种有效处理各种货币的技术(这是一个难题)。

格式化仅用于显示目的。格式化数字时,它会变成String。你不能使用Formatter来舍入数字,然后用它们计算。

另一答案

IDE中可用的JavaDoc有一个示例用法,可以为您解决问题。

JavaDoc

您需要为格式化程序提供一个“out”(StringBuilder),然后从那里获取字符串并生成小数。

我同意另一个答案,只是做一个随机的整数并除以100来实现两个小数点数。

另一答案

问题首先是,Formatter不是你想要的值,第二个Formatter是不可比的。

需要使用toString()方法检索format方法的结果,以使其成为必须使用util方法的double。

Formatter fmt = new Formatter();
double value = Double.parseDouble(fmt.format("%.2f", x).toString());

然后你比较值而不是'fmt'

另一答案

正如其他评论所说,问题在于尝试使用Formatter而不是可比较的值。你通常可以从Double得到这个。您也可以在这里找到DecimalFormat类:

double money = 85.36121;
DecimalFormat df = new DecimalFormat("##.##");      
money = Double.valueOf(df.format(money)); //gives 85.36

以上是关于如何通过格式化将双精度数转两位小数,然后使用数字?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以将两位小数分配给双精度

如何将一个数字保留到小数点后两位?

将双精度转换为双精度,带一位小数和一位小数?

将双精度数舍入到 x 有效数字

如何在Oracle数据库中保留小数点后两位 而且在java中保留两位插入到数据表中

如何在Oracle数据库中保留小数点后两位 而且在java中保留两位插入到数据表中