2017-01-01 71 views
-3

我想在C中精度爲12位小數。我不知道是否有更簡單的解決方案。但至少該代碼有效。現在,我只是試圖將結果保存爲「長雙」,但「strtold()」不工作C中有12位小數乘以多少?

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

代碼中沒有strtold!什麼是「doubleToVoidPointerInNewMemoryLocation」的定義 –

+0

int main() { float f1 = 2.053388; float f2 = 0.100269; long double f3; f3 = strtold(multiply12Decimals(f1,f2),NULL); printf(「Final:%Lf」,f3); return 0; } – CEAC

+0

這段代碼根本沒有意義。爲什麼你認爲你需要間歇性地改變字符串和什麼 –

回答

2

printf("%.12lf",num);解決了這個問題。

將兩個double相乘,然後像這樣打印出來。無需使用long

+0

謝謝!現在我發現我只是讓我的生活變得複雜 – CEAC