将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