將double/float轉為字符串(帶自定義精度)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
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; } |
需用到頭文件有
1
2
3
|
#include <stdio.h> #include <stdlib.h> #include <string.h> |
簡單用法
1
2
3
|
double d = 3.1415926; char dstr[20]; sprintf (dstr, "%.2lf" ,d); //將d 保留2位小數賦值給dstr |
float和double精度問題
double和float的區別
是double精度高,有效數字16位,float精度7位。但double消耗內存是float的兩倍,double的運算速度比float慢得多,C語言中數學函數名稱double 和 float不同,不要寫錯,能用單精度時不要用雙精度(以省內存,加快運算速度)。
float和double的精度
是由尾數的位數來決定的。浮點數在內存中是按科學計數法來存儲的,其整數部分始終是一個隱含著的“1”,由于它是不變的,故不能對精度造成影響。
-
float
:2^23 = 8388608,一共七位,這意味著最多能有7位有效數字,但絕對能保證的為6位,也即float的精度為6~7位有效數字; -
double
:2^52 = 4503599627370496,一共16位,同理,double的精度為15~16位。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/qq_31028313/article/details/86520864