2013-05-22 54 views
-2

我應該把值減少到int和float部分。像'21' - 想要得到'2'和'1'作爲整數。C++ modff錯誤

float fp; // float part 
float fp1; // new "int-style" float part 
float ip; // int part 

fp = modff(21.0/10, &ip); 
ip = ip*10; // there i will get the '2'. Its works fine 
fp1 = fp*10; // there i will get a null (0.09999999 by debugger, 
but should to be 0.99+)... 

但與其他任何價值, '22',例如, 它會奏效。 也可以。怎麼了? :(

好像該函數不會像單元

============================== ====

是啊很容易修正!:)我用'modf'而不是'modff'。它具有「雙」的數據類型,所以它現在正常工作)

感謝您的答案

+1

'21'沒有小數部分。它會給出'21'整數部分和'0'小數部分。我不明白你的問題。 – interjay

+0

interjay>我不想讓'21'成爲'2'和'1'。在休息之前,我已將'21'轉換爲'2.1'。 對不起,我的錯。忘記了'21 .0/10' – FireForce

+0

請發佈一些你已經測試**的代碼,並說出它輸出的內容和你的期望。你顯然沒有測試這裏發佈的代碼,因爲你不斷修改它來修復錯誤。 – interjay

回答

1

在浮點,當你做21.0/10.0您一般不得到2.1。你得到的是2.099或類似的東西,由於浮點不準確。

float fp; // float part 
float fp1; // new "int-style" float part 
float ip; // int part 

float value = 21.0; 
float part = 10.0; 
fp = modf(value/part, &ip); 
fp1 = value - (ip * part); //gives you 21 - (2 * 10) = 1 

//ip = 2 
//fp1 = 1 
+0

謝謝) 'modf'而不是'modff'rulez ^^ – FireForce

+0

當你做1/3你不會得到三分之一,因爲整數不準確。同樣的問題,但程序員學會接受整數類型。 –