C語言實現(xiàn)將double/float 轉(zhuǎn)為字符串(帶自定義精度)
將double/float轉(zhuǎn)為字符串(帶自定義精度)
char *double_to_string(double d, int decimal) { decimal = decimal < 0 ? 0 : decimal; char *p; char dd[20]; switch (decimal) { case 0: sprintf(dd, "%.0lf", d); break; case 1: sprintf(dd, "%.1lf", d); break; case 2: sprintf(dd, "%.2lf", d); break; case 3: sprintf(dd, "%.3lf", d); break; case 4: sprintf(dd, "%.4lf", d); break; case 5: sprintf(dd, "%.5lf", d); break; default: sprintf(dd, "%.6lf", d); break; } p = malloc(strlen(dd)); strcpy(p,dd); return p; }
需用到頭文件有
#include <stdio.h> #include <stdlib.h> #include <string.h>
簡單用法
double d = 3.1415926; char dstr[20]; sprintf(dstr,"%.2lf",d);//將d 保留2位小數(shù)賦值給dstr
float和double精度問題
double和float的區(qū)別
是double精度高,有效數(shù)字16位,float精度7位。但double消耗內(nèi)存是float的兩倍,double的運算速度比float慢得多,C語言中數(shù)學(xué)函數(shù)名稱double 和 float不同,不要寫錯,能用單精度時不要用雙精度(以省內(nèi)存,加快運算速度)。
float和double的精度
是由尾數(shù)的位數(shù)來決定的。浮點數(shù)在內(nèi)存中是按科學(xué)計數(shù)法來存儲的,其整數(shù)部分始終是一個隱含著的“1”,由于它是不變的,故不能對精度造成影響。
float
:2^23 = 8388608,一共七位,這意味著最多能有7位有效數(shù)字,但絕對能保證的為6位,也即float的精度為6~7位有效數(shù)字;double
:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言通過深度優(yōu)先搜索來解電梯問題和N皇后問題的示例
深度優(yōu)先搜索即是對一個新發(fā)現(xiàn)的節(jié)點上如果還關(guān)聯(lián)未探測到的邊,就沿此邊探測下去,直到發(fā)現(xiàn)從原點可達的所有點為止,這里我們就來展示C語言通過深度優(yōu)先搜索來解電梯問題和N皇后問題的示例2016-06-06