Handsome_zhou 发表于 2022-9-24 23:12:07

C语言以指数形式输出时小数点最后一位四舍五入了,怎么取消哈,不要四舍五入?

本帖最后由 Handsome_zhou 于 2022-9-24 23:13 编辑



怎么让结果变成1.234567e+15哈?

jackz007 发表于 2022-9-24 23:36:08

本帖最后由 jackz007 于 2022-9-25 00:34 编辑

      常规手段无法实现,得动用特殊手段才行。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char * foo(float a)
{
      int i , j , k , n                                 ;
      char * s                                          ;
      s = (char *) malloc(256)                        ;
      sprintf(s , "%.7e" , a)                           ;
      for(n = 0 ; s ; n ++)                        ;
      for(i = 0 ; i < n && s != '.' ; i ++)          ;
      for(j = i ; j < i + 7 ; j ++)                     ;
      for(k = j + 1 ; k < n + 1 ; k ++) s = s ;
      return s                                          ;
}

int main(void)
{
      char * p                                          ;
      float a = 1234567890988766                        ;
      p = foo(a)                                        ;
      printf("%s\n" , p)                              ;
      free(p)                                           ;
}
      编译、运行实况
D:\\C>g++ -o x x.c

D:\\C>x
1.234567e+015

D:\\C>
      其思路为,先将 a 转换成含 7 位小数的科学计数法形式的字符串,然后,通过字符串操作,把 "e+015" 整体前移一个字符,把第7位小数覆盖掉,这样第6位小数就再也不会有四舍五入了。
页: [1]
查看完整版本: C语言以指数形式输出时小数点最后一位四舍五入了,怎么取消哈,不要四舍五入?