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

时间:2018-02-28 19:52:18

标签: java formatting

我目前正在制作一个生成随机数的程序,然后计算出该数字所需的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,但是如何获得我格式化的随机双数或以某种方式将其更改为双重以便我可以使用它?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

JavaDoc

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

我同意另一个答案,只需做一个随机整数并除以100即可得到两位小数。

答案 2 :(得分:0)

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

需要使用toString()方法检索format方法的结果,要将它作为double使用,必须使用util方法。

#! /bin/bash

function check()
{
  local file=$1
  local pattern=$2
  local result=$(cat $file | gawk -f is-here.awk -v value=$pattern)
  echo $result
}

FILES="xml1 xml2"

for file in $FILES
do
  result=$(check $file $1)

  if [ "$result" == "present" ]
  then
    echo "$1 found in $file"
  else
    echo "$1 not found in $file"
  fi  
done

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

答案 3 :(得分:0)

正如其他评论所说,问题在于尝试使用Formatter而不是可比较的价值。您通常可以从Double获取此信息。您还可以在此处找到适用的DecimalFormat类:

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