Gdy próbuję przekonwertować tablicę char na liczbę long double za pomocą funkcji atof, zostaje ona ucięta do 6 miejsc po przecinku.. np. char o zawartości 0.666666666667 staje się tylko 0.666667... jak to obejść, naprawić..?</b>
W C
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
long double d;
char *str = "0.666666666667";
d = atof(str);
printf("string = %s long double = %.13Lf\n", str, d);
getchar();
return 0;
}
//EDIT a no tak ....
C++ zerknij tutaj
http://4programmers.net/Forum/viewtopic.php?id=115636
c++ :
A języka to nie łaska podać ? ..
spójrz na tytul postu
dzięki za pomoc
nie, nie o to mi chodziło.
przede wszystkim liczba typu long double jest zwracana przez jedną funkcję, a wyświetlana w drugiej. I to ta pierwsza funkcja dokonuje operacji atof() więc nie mam dostępu do tablicy charów. po drugie ta zmienna long double ma ZAWIERAĆ tą dokładną wartość, bo ona będzie potrzebna do dalszych obliczeń.
Zawiera po atof.
Trzeba ją tylko odpowiednio wyświetlić.
#include <iostream>
#include <iomanip>
#include <stdlib.h>
using namespace std;
int main() {
long double d;
char *str = "0.666666666667";
d = atof(str);
cout << fixed << setprecision(12) << d << endl;
cin.get();
return 0;
}
Jeśli konwersja była by nie dokładna to wynik byłby inny...
a jest 0.666666666667 [ wartośc 'd' ]
Właściwie to pasuje inna Funkcja :
#include <math.h>
double atof(const char *s);
double _wtof(const wchar_t *s);
long double _atold(const char *s);
long double _wtold(const wchar_t *s);
_atold
barth: double nie sa dokladne.. poza tym, jesli wykonujesz jakiekolwiek operacje, to musisz byc pewien ze na nich dokladnosci nie stracisz.. wystarczy ze po drodze bedzie jedna operacja/wywolanie gdzie wartosc przejdzie przez np. float i kupa, o dokladnosci mozna zapomniec.