C语言实现将double/float 转为字符串(带自定义精度)

目录
  • 将double/float转为字符串(带自定义精度)
    • 需用到头文件有
    • 简单用法
  • float和double精度问题
    • double和float的区别
    • float和double的精度

将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

本文链接:https://my.lmcjl.com/post/8169.html

展开阅读全文

4 评论

留下您的评论.