| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2041 人关注过本帖
标题:程序没问题但是结果不对
只看楼主 加入收藏
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:18 
程序没问题但是结果不对
程序代码:
#define _STDC_WANT_LIB_EXT1_1
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <math.h>
#define number_count 3

int main(void)
{
    double a = -1.15;
    double temp = a;
    char* bh_to_string = NULL;
    int bf_length = 0;
    int bh_length = 0;
    int length = 0;
    while (fabs(temp) - (int)fabs(temp) != 0)
    {
        bh_length++;
        temp = temp * 10;
    }
    temp = fabs(a) - (int)fabs(a);
    
    temp = pow(10,bh_length) * temp;
    int x = (int)temp;
    bh_length++;
    bh_to_string = malloc(bh_length + 1);
    bh_to_string[bh_length] = '\0';
    while (temp >= 1)
    {
        bh_length--;
        bh_to_string[bh_length] = (int)temp % 10 + '0';
        temp = temp / 10;
    }
    bh_to_string[0] = '.';
    printf("%s\n",bh_to_string);
    return 0;
}

这个是个程序转换题,给一个指定的双精度,将小数点以后的数字转换成字符串形式输出,例如-1.15,字符串输出就应该是.15,但是我写的程序结果是.14。求大神帮帮忙
2016-02-14 15:45
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
大神们不要在意开头的头文件偶,这个只是小弟编程其中一个函数,我只是把这个函数放到main函数里验证一下有没有错误,结果果然出错了。小弟自学,真心不值到为啥会这样
2016-02-14 15:50
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
看来版主大大们都不在
2016-02-14 16:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
“给一个指定的双精度,将小数点以后的数字转换成字符串形式输出,例如-1.15” --- 看不懂,也猜不出想要什么
-1.15(double) 是多少?浮点数不是实数
-1.15(double) 对应的实数是 -1.149999999999999911182158029987476766109466552734375
2016-02-14 16:29
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 4楼 rjsp
版主大大,是这样的,double a=-1.15是要转换的数字,该数字转换完成后结果应该是一个字符串,输出后结果为 .15。但是,我的结果是.14。不是到为什么会出现这种结果,有没有什么办法避免。
2016-02-14 16:34
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:20 
首先,你的算法有问题,你并没有穷尽小数点后面的所有数。
其次,你给double和flaot类型的数赋值后,在计算机内只会实际赋给一个近似值,不可能是你实际输入的值。
下述代码可以穷尽你赋给的1.15的近似值是多少:
程序代码:
#include <stdio.h>
void main()
{
    double a=-1.15;
    int i;
    char b[100];
    if(a<0)a=-a;
    a=(a-int(a))*10;
    for(i=1,b[0]='.';a>0;a=(a-(int)a)*10)b[i++]=(int)a+'0';
    b[i]=0;
    printf("%s\n",b);
}
显示结果是:.149999999999999911182158029987476766109466552734375

能编个毛线衣吗?
2016-02-14 17:26
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 6楼 wmf2014
那如何避免这种情况
2016-02-14 19:39
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不計算會嗎?

授人以渔,不授人以鱼。
2016-02-17 21:50
foxeer
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:107
专家分:136
注 册:2015-12-29
收藏
得分:0 
回复 8楼 TonyDeng
请指教
2016-02-18 09:35
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
已經告訴你“不計算”了。

授人以渔,不授人以鱼。
2016-02-18 12:22
快速回复:程序没问题但是结果不对
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050158 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved