2013-04-30 186 views
-2

我就通過我的這個問題採訪我不知道如何解決這個幫我一個浮點無需轉換詮釋爲int

「計劃,以截斷一個給定的浮點值(eg16.25 = 16 )。你不應該把float值賦給整數&,然後把int值複製到float ...應用不同的邏輯。「

+0

你可以將float賦值給任何其他數據類型嗎? – tnw 2013-04-30 19:13:27

+0

不使用任何其他數據類型 – suresh 2013-04-30 19:14:42

+0

轉換爲字符串,在小數點後修剪所有字符。然後你可以解析字符串轉換爲int。 – OldProgrammer 2013-04-30 19:14:50

回答

3

如果數值爲正:

#include <math.h> 
printf("%f\n", floor(16.85)); 

或正數和負數:

printf("%f\n", trunc(16.85)); 
+0

如果數字是負數? – MyCodeSucks 2013-04-30 19:19:42

+0

@ CL4PTR4P'ceil(-16.85)'當然 – ouah 2013-04-30 19:20:52

+0

+1有趣的是知道爲什麼'floor'是downvoted ... – 2013-04-30 19:21:26

3

看是否有此人會做。

#include<stdio.h> 

int main() 
{ 

float num=16.25; 
int x; 
char str[10]; 
sprintf(str,"%f",num); 
sscanf(str,"%d",&x); 
printf("The number now is %d",x); 
} 
2

如果你放棄所有的「轉換成字符串」類型的答案,純粹專注於數學運算,你可以試試這個可怕低效的過程:

float Truncate(float n) { 
    float r = 0.0 
    if(n > 0.0) { 
    while(n > 0.0) { 
     n -= 1.0; 
     r += 1.0; 
    } 
    } else { 
    while(n < 0.0) { 
     n += 1.0; 
     r -= 1.0; 
    } 
    } 
    return r; 
} 

這可能需要一百年才能完成對於更大的N值,但這只是工程。該算法是健全的。其實,你大概可以做一些類似的事情,但有分裂而不是減法,這會大大加快速度。

+0

問題不在於它可能需要一百年,因爲它不會終止。如果'n'是'(float)(1 << 26)',那麼'n - 1.0f'計算爲'n'。 – 2013-04-30 21:16:34

+0

實際上使計算機數量達到一個接一個(最大值在32位'unsigned int'中表示)需要不到幾分鐘的時間。 – 2013-04-30 21:24:28