标题: 求助 C语言计算问题 [打印本页]

作者: ZMRGHY    时间: 2021-12-2 23:44
标题: 求助 C语言计算问题
求助 C语言问题。
在C语言 123.456×3≠370.368
123.456×3=370.36799999999999999999999
number数据   转字符  char数据时,做了位数限制。

如果,不做限制,一点转换就没有了响应。只能任务管理器里结束进程。或者长按电脑电源。。。
想关机,开始菜单也没有反应。。。。




text_char_number.rar (672.6 KB, 下载次数: 8)



作者: 13205495918    时间: 2021-12-3 07:54
你是在用c++搞什么开发哎,请问一下。
作者: Hephaestus    时间: 2021-12-3 16:52
明显是number_char()的行为不符合你的预期,那就重写好了。
作者: 乐水    时间: 2021-12-3 17:01
精度问题,四舍五入就好了
作者: AUG    时间: 2021-12-3 18:11
正常的  精度问题,C++和C里面都有这种情况,还有一种情况就是XX.000000000000000000000001这种小数点后面多了那么个1,自己处理一下就好了 ,别大惊小怪。
作者: ZMRGHY    时间: 2021-12-4 01:19
13205495918 发表于 2021-12-3 07:54
你是在用c++搞什么开发哎,请问一下。

无聊时间,学点编程。打发无聊时间。。。。
作者: 人工置顶员    时间: 2021-12-4 01:24
顶一下
作者: 天ノ忆    时间: 2021-12-4 18:00
这个是精度问题

51hei拼音截图20211204155235.png (3.16 KB, 下载次数: 49)

51hei拼音截图20211204155235.png

作者: Hephaestus    时间: 2021-12-4 18:34
我把出问题的函数提出来,大家看看什么问题。

  1. void number_char(double num ,char *pch)
  2. {
  3.         int i=0, j=0;
  4.         long k=1, zs=0;
  5.         while((long)num > 10*k)
  6.                 k *= 10;
  7.         for(i=0; k>=1;i++)
  8.         {
  9.                 pch[i] = ((long)num)%(10*k)/k+48;
  10.                 k /= 10;
  11.         }
  12.         pch[i]=46;
  13.         for(j=0; j<i; j++)
  14.         {
  15.                 zs *= 10;
  16.                 zs += pch[j]-48;
  17.         }
  18.         num -= zs;
  19.         while(num > 0.0000001 && i<18)
  20.         {
  21.                 num *= 10.0;
  22.                 i++;
  23.                 pch[i] = ((long)num)/1+48;
  24.                 num = num- ((long)num)/1;
  25.         }
  26. }
复制代码

作者: 996256177    时间: 2021-12-4 20:41
精度问题,重新改一下就行
作者: awkkjb    时间: 2021-12-5 11:36
修改一下精度就可以了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1