|
发表于 2022-9-24 23:36:08
From FishC Mobile
|
显示全部楼层
本楼为最佳答案
本帖最后由 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] ; n ++) ;
- for(i = 0 ; i < n && s[i] != '.' ; i ++) ;
- for(j = i ; j < i + 7 ; j ++) ;
- for(k = j + 1 ; k < n + 1 ; k ++) s[k - 1] = s[k] ;
- return s ;
- }
- int main(void)
- {
- char * p ;
- float a = 1234567890988766 ;
- p = foo(a) ;
- printf("%s\n" , p) ;
- free(p) ;
- }
复制代码
编译、运行实况
- D:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 1.234567e+015
- D:\[00.Exerciese.2022]\C>
复制代码
其思路为,先将 a 转换成含 7 位小数的科学计数法形式的字符串,然后,通过字符串操作,把 "e+015" 整体前移一个字符,把第7位小数覆盖掉,这样第6位小数就再也不会有四舍五入了。 |
|