C语言以指数形式输出时小数点最后一位四舍五入了,怎么取消哈,不要四舍五入?
本帖最后由 Handsome_zhou 于 2022-9-24 23:13 编辑怎么让结果变成1.234567e+15哈? 本帖最后由 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]