岛boki 2019-01-02 01:11 采纳率: 0%
浏览 583

C语言int型强制转换造成的误差可以避免吗

如题,需要做一个将实数的整数和小数分开的函数。代码如下


```#include <stdio.h>
void splitfloat(float x,int *intpart,float *fracpart);
int main (){
float x;
int intpart;
float fracpart;
printf("Enter x:\n");
scanf("%f",&x);
splitfloat(x,&intpart,&fracpart);
printf("Intpart:%d,Fracpart:%f",intpart,fracpart);
return 0;}
void splitfloat(float x,int *intpart,float *fracpart){
*intpart=(int)x;
*fracpart=x-*intpart;
}

给出的结果是

4327.869

Intpart:4327,Fracpart:0.869141

想问后面多出来的0.000141如何避免??谢谢

看来好像不是int强制转换的问题,编写了如下代码,仍然有4-6位小数。



```void splitfloat(float x,int *intpart,float *fracpart){
int i;
for(i=0;;i++)
if(i>x) {*intpart=i-1;
break;
}
*fracpart=x-*intpart;
}

  • 写回答

4条回答 默认 最新

  • 宫崎式羽 2019-01-02 00:26
    关注

    你试试把float改为double试试

    评论

报告相同问题?

悬赏问题

  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作
  • ¥15 idea右下角设置编码是灰色的
  • ¥15 全志H618ROM新增分区
  • ¥15 在grasshopper里DrawViewportWires更改预览后,禁用电池仍然显示
  • ¥15 NAO机器人的录音程序保存问题
  • ¥15 C#读写EXCEL文件,不同编译
  • ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
  • ¥15 扩散模型sd.webui使用时报错“Nonetype”
  • ¥15 stm32流水灯+呼吸灯+外部中断按键