2017-01-01 8 views
-3

J'essaie d'avoir une précision de 12 décimales en C. Je ne sais pas s'il y a une solution plus facile. Mais au moins ce code fonctionne. Maintenant, je suis juste essayer de sauvegarder le résultat dans un « long double », mais « strtold() » ne fonctionne pasComment se multiplier avec 12 décimales en C?

char* multiply12Decimals(float n1, float n2) 
{ 
    long n1Digits; 
    sscanf(doubleToVoidPointerInNewMemoryLocation(n1*1000000), "%ld", &n1Digits); 
    printf("n1Digits: %ld\n", n1Digits); 

    long n2Digits; 
    sscanf(doubleToVoidPointerInNewMemoryLocation(n2*1000000), "%ld", &n2Digits); 
    printf("n2Digits: %ld\n", n2Digits); 

    long long mult = (long long) n1Digits*n2Digits; 
    printf("mult: %lld\n", mult); 

    char *charNum = malloc(30*sizeof(char)); 

    sprintf (charNum, "0.%012lld\n", mult); 
    printf("result: %s\n", charNum); 

    return charNum; 
} 
+0

Il n'y a pas de code dans le code! Quelle est la définition de "doubleToVoidPointerInNewMemoryLocation" –

+0

int main() { float f1 = 2.053388; flotteur f2 = 0,100269; long double f3; f3 = strtold (multiplier12Décimales (f1, f2), NULL); printf ("Final:% Lf", f3); return 0; } – CEAC

+0

Ce code n'a aucun sens. Pourquoi pensez-vous que vous avez besoin de changer les choses par intermittence à des chaînes et autres joyeusetés –

Répondre

2

printf("%.12lf",num); résout le problème.

Multipliez deux doubles et imprimez-le comme ceci. Pas besoin d'utiliser long.

+0

Merci! Maintenant, je vois que je ne faisais que compliquer ma vie – CEAC