C# 浮点到整数,不转换为整数

C# 浮点到整数,不转换为整数,c#,c,C#,C,我在面试时遇到了这个问题,我不知道如何解决这个问题,请帮我解决 “用于截断给定浮点值(例如16.25=16)的程序。不应将浮点值赋给整数,然后将整数值复制到浮点值…应用不同的逻辑。”如果数字为正数: #include <math.h> printf("%f\n", floor(16.85)); 看看这个行不行 #include<stdio.h> int main() { float num=16.25; int x; char str[10]; sprintf(st

我在面试时遇到了这个问题,我不知道如何解决这个问题,请帮我解决


“用于截断给定浮点值(例如16.25=16)的程序。不应将浮点值赋给整数,然后将整数值复制到浮点值…应用不同的逻辑。”

如果数字为正数:

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

看看这个行不行

#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);
}
#包括
int main()
{
浮点数=16.25;
int x;
char-str[10];
sprintf(str,“%f”,num);
sscanf(str、%d、&x);
printf(“现在的数字是%d”,x);
}

如果您放弃所有“转换为字符串”类型的答案,只关注数学运算,您可以尝试这个效率极低的过程:

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;
}
float截断(float n){
浮点数r=0.0
如果(n>0.0){
而(n>0.0){
n-=1.0;
r+=1.0;
}
}否则{
而(n<0.0){
n+=1.0;
r-=1.0;
}
}
返回r;
}

可能需要100年才能完成更大的N值,但这只是工程。算法是可靠的。实际上,你也可以做一些类似的事情,但是用除法而不是减法可以大大加快速度。

你能把浮点分配给任何其他数据类型吗?不,不使用任何其他数据类型。你在简历上写了“有效利用可用资源”吗?哇,这是一个很好的问题。有人问你这个问题,你就走吧,省去你所有的痛苦和困难。答案对于不同的语言是不同的——你只是随机标记了C/C,还是那些才是真正的选择?如果数字是负数?@CL4PTR4P
ceil(-16.85)
当然+1很有意思的是,知道为什么
楼层
被否决了……你不认为你应该把它放在答案中吗?我可以理解为什么有些人否决了这个答案,但我认为问题还不够清楚。如果面试官要求我的程序截断给定的浮点值(例如16.25=16),这将是我的第一个答案。问题不在于它可能需要100年,而在于它不会终止。如果
n
(float)(1实际上,让一台计算机逐个计数到40亿(32位
无符号int
中可表示的最大值)不到几分钟。
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;
}