C語(yǔ)言實(shí)現(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>
簡(jiǎn)單用法
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的運(yùn)算速度比f(wàn)loat慢得多,C語(yǔ)言中數(shù)學(xué)函數(shù)名稱double 和 float不同,不要寫錯(cuò),能用單精度時(shí)不要用雙精度(以省內(nèi)存,加快運(yùn)算速度)。
float和double的精度
是由尾數(shù)的位數(shù)來(lái)決定的。浮點(diǎn)數(shù)在內(nèi)存中是按科學(xué)計(jì)數(shù)法來(lái)存儲(chǔ)的,其整數(shù)部分始終是一個(gè)隱含著的“1”,由于它是不變的,故不能對(duì)精度造成影響。
float
:2^23 = 8388608,一共七位,這意味著最多能有7位有效數(shù)字,但絕對(duì)能保證的為6位,也即float的精度為6~7位有效數(shù)字;double
:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言深入詳解四大內(nèi)存函數(shù)的使用
這篇文章主要介紹了C語(yǔ)言的四大內(nèi)存函數(shù),講解了mencpy、memmove、memcmp、memset函數(shù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-07-07C語(yǔ)言編程C++動(dòng)態(tài)內(nèi)存分配示例講解
這篇文章主要介紹了C語(yǔ)言編程C++動(dòng)態(tài)內(nèi)存分配示例講解,為什么存在動(dòng)態(tài)內(nèi)存分配?本文通過動(dòng)態(tài)內(nèi)存介紹及常見內(nèi)存錯(cuò)誤等示例來(lái)為大家講解2021-09-09C語(yǔ)言通過深度優(yōu)先搜索來(lái)解電梯問題和N皇后問題的示例
深度優(yōu)先搜索即是對(duì)一個(gè)新發(fā)現(xiàn)的節(jié)點(diǎn)上如果還關(guān)聯(lián)未探測(cè)到的邊,就沿此邊探測(cè)下去,直到發(fā)現(xiàn)從原點(diǎn)可達(dá)的所有點(diǎn)為止,這里我們就來(lái)展示C語(yǔ)言通過深度優(yōu)先搜索來(lái)解電梯問題和N皇后問題的示例2016-06-06