2017-07-24 39 views
1

我想隨機使用Java在0到2.10的範圍內生成價格。我希望價格的格式爲0.00,0.10,0.20,0.30,0.40,0.50 .... 1.10,1.20一直到2.10。我的代碼是這樣的:Java隨機生成兩位十進制格式的價格

private static DecimalFormat df2 = new DecimalFormat(".##"); 
double min = 0; 
double max = 2.10; 
double diff = max - min; 
double randomValue = min + Math.random() * diff; 
System.out.println(df2.format(randomValue)); 

但是,它打印出像.06,1.0,.99,.02等值。有無論如何格式化它?

+0

不行不行。我仍然會看到一些值,例如.03,.07等 – hyperfkcb

+0

如果您希望所有隨機值都是0.10的倍數,則生成一個隨機整數並將其乘以0.10(或除以10)。查看Random類可以生成隨機整數。 – ajb

回答

1

正如我在註釋中規定,這是通過乘以10隨機值結果,然後在其上施加Math.floor()非常容易地可能的,並且然後最後劃分上一步獲得的結果將爲你做。

注:(!在評論部分,我的手指在最後輸入一個額外的0我已刪除雖然評論)

工作代碼爲:

// use the correct pattern #0.00 
DecimalFormat formatter = new DecimalFormat("#0.00"); // edited here.  
double randomValue = min + Math.random() * diff; 
double tempRes = Math.floor(randomValue * 10); 
double finalRes = tempRes/10; 
System.out.println(formatter.format(finalRes)); 
+0

但是,即使我將DecimalFormat添加爲#,這也給了我一個小數點。## – hyperfkcb

+0

是的,但是不知怎的,它仍然給我一個小數點。有任何想法嗎? – hyperfkcb

+0

@丹尼斯坦 - 我希望我的回答有幫助,而且是最簡單的。您需要在應用DecimalFormat(「#0.00」)時使用正確的模式,請檢查。 –

1

對不起,請仔細閱讀。

private static DecimalFormat df2 = new DecimalFormat("#.#"); 
... 
System.out.println(df2.format(randomValue) + "0"); 
+0

對不起,請仔細閱讀。 –

2

你可以把它產生在0喜歡這個結尾的數字:

public static void main(String[] args){ 
    DecimalFormat df2 = new DecimalFormat("0.0"); 
    double min = 0.00; 
    double max = 2.10; 
    double rand = new Random().nextDouble(); 
    String result = df2.format(min + (rand * (max - min))) + "0"; 
    System.out.println(result); 
} 

它只是舍入小數到第十位,然後將0到輸出,生成你想要的數字。

以下是輸出的一些例子:

1.90 
1.50 
0.70 
2.10 
1.40 
1.10 
0.10 
0.00 
0.60 
+0

我得到'.20' .... –

+0

這就是OP想要的。 – CodingNinja

+0

_「我想要的格式的價格像0.00,0.10,0.20,0.30,0.40,0.50 ....」_ –

2

我有另一個直接的解決方案,也許這是最簡單的解決方案?用這種方式考慮一下:0.00,0.10,0.20 ... 2.10,實際上你只需要生成從0(含)到22(不含)的隨機整數,然後除以10即可。然後你可以使用結果來格式化。

例如,你有的隨機數是18,那麼結果是1.8,那麼你可以格式化爲1.80;同樣的邏輯,如果你想要價格的最小差距爲0.01,你可以生成從0(包含)到211(不包括)的隨機數併除以100;否則,

處理0時不需要其他操作。

+0

反正有沒有在這種情況下使用printf?因爲我將使用System.out.println – hyperfkcb

+0

@DeniseTan來格式化輸出我可能知道是否有任何理由這樣做?因爲printf中的%n用於換行printn中的ln – Elvin

+0

您可以使用'String.format',它使用與'printf'相同類型的格式字符串,但不打印任何內容。請參閱[javadoc](http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#format-java.lang.String-java.lang.Object...-) – ajb