2013-10-29 68 views
3

我該怎麼做?C++創建一個0.1到10之間的隨機小數

這是我這樣做的嘗試:

srand (time(NULL)); 
seed = ((double)rand())/((double)RAND_MAX) * 10 + 0.5; 

還什麼是創建0和一些INT X之間的隨機整數的方式。 [0,X]

+2

你想怎樣分配來實現呢?制服? –

+0

只需創建一個從'0'到'9.9'的隨機小數,並添加'0.1'... –

+0

請參閱編輯我的答案爲您的整數問題。 – Adam

回答

1
srand (time(NULL)); 
seed = ((double)rand())/((double)RAND_MAX) * 9.9 + 0.1; 

露面到小數點後2位:

printf("%.2lf\n", seed); 

如果x你需要的是小於RAND_MAX,然後用

seed = rand() % (x+1); 

產生一個整數在[0, x]

+0

有沒有什麼方法可以格式化,以便只顯示最多兩位小數? – tmacnadidas

+0

要僅顯示兩位小數,請控制如何將其打印到屏幕。例如'sprintf(「%。2d」,float_number);' – Silex

+0

@ user2293151編輯成答案。 – timrau

9

的C++ 11路:

#include <random> 

std::random_device rd; 
std::default_random_engine generator(rd()); // rd() provides a random seed 
std::uniform_real_distribution<double> distribution(0.1,10); 

double number = distribution(generator); 

如果只想整數,用這個來代替分佈:

std::uniform_int_distribution<int> distribution(0, x); 

C++ 11是真正強大和精心設計的在這方面。發電機與分配的選擇是分開的,範圍被考慮到,線程安全,性能好,人們花了很多時間來確保它們都是正確的。最後一部分比你想象的要難得多。

+1

在一個較長的概述http://stackoverflow.com/questions/7114043/random-number-generation-in-c11-how-to-generate-how-do-they-work – Silex

+0

@Silex很好的鏈接的更多信息。來自2013年GoingNative的這次演講也非常有趣和翔實:http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful – Adam

+0

應該指出,你不是播種引擎。 – Simple

0
#include <iostream> 
#include <algorithm> 
#include <vector> 
#include <ctime> 
#include <cstdlib> 

using namespace std; 

float r(int fanwei) 
{ 
    srand((unsigned)time(NULL)); 
    int nTmp = rand()%fanwei; 
    return (float) nTmp/10; 
} 

int main(int argc, const char * argv[]) 
{ 
    cout<<r(100)<<endl; 
    return 0; 
}