[c++] błędna konwersja char* na long double

0

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>

0

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++ :

0

A języka to nie łaska podać ? ..

spójrz na tytul postu
dzięki za pomoc

0

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ń.

0

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

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1