C또는 C++ 에서 유효숫자 변경

mmkim78의 이미지

예컨데,
3.1415925 -> 3.142
0.0001986528 -> 0.0001987
12363.4 -> 1236

이런식으로 유효숫자를 변경하려면 어떻게 해야 하나요?
화면으로 보려면 C++ 라면 cout.precision(4) 를 하면 되지만, 출력말고 숫자자체를 바꾸고 싶어서요.

addnull의 이미지

#include <stdio.h>
#include <stdlib.h>

int	main()
{
	double	t = 3.1415925;
	char	s[255];

	printf("%lf\n", t);

	sprintf(s, "%.3lf", t);
	t = atof(s);
	printf("%lf\n", t);

	return 0;
}

대략 이 정도면.. ^^

2005년 10월 10일.

tinywolf의 이미지

ㅋㅋ

ㅡ_ㅡ;

tinywolf의 이미지

double pi = 3.1415925;
double cut = ceil(pi * 1000.0) / 1000.0;

힝~

ㅡ_ㅡ;

mmkim78의 이미지

고맙습니다.

그런데 위의 두 답글은 3.141592 -> 3.142 는 잘 되는데, 3141592 -> 3142000 은 안 되서 다시 고쳐봤습니다.

#include <iostream>
#include <sstream>

using namespace std;

int main()
{
double t = 31415925;

stringstream st;
st.precision(4);

cout << t << endl;
st << t;
st >> t;
cout << t << endl;

return 0;
}

lifthrasiir의 이미지

stringstream을 안 쓰고 정의에 따라서 한다면...

double convert_precision(double value, int prec = 4) {
    if(value > 0) {
        double mult = pow(10.0, ceil(log10(value)) - prec);
        return floor(value / mult) * mult;
    } else if(value < 0) {
        return -convert_precision(-value, prec);
    } else {
        return 0.0;
    }
}

- 토끼군