2013-04-30 142 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