转换成字符输出
如果有bug欢迎评论 会进行修正
void _pri(double x, long long n, bool f) { //预处理数字,保留位数,是否需要四舍五入
double _ma = 1.0, _mi = 1.0, _t = 10.0;
long long _n = n, i = 0, cnt = 0;
while(_n) {
if(_n % 2 == 1) _ma *= _t, _mi /= _t;
_n >>= 1, _t *= _t;
}
if(x < 0) printf("-"), x = -x;
if(x < 1) printf("0.");
if(x < _mi) {
for(i = 0; i < n; ++i) printf("0");
return;
}
double t = 1.0, _x = x;
if(x >= 1)
while(_x >= 1)
_x /= 10, cnt++;
if(x < 1)
while(_x < 1) {
if(_x < 0.1) printf("0");
_x *= 10;
}
while(_x < _ma) _x *= 10;
long long a = (long long)_x;
if(f == 1 && cnt <= n && a % 10 >= 5)
if(a > 0) a += 10;
else if(a < 0) a -= 10;
a /= 10;
char ans[105]; _n = 0;
while(a) {
ans[_n++] = a%10 + '0';
a /= 10;
}
for(i = 0; i < _n; ++i) {
if(i == cnt && cnt != 0) printf(".");
printf("%c",ans[_n - i - 1]);
}
}