-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconvert_float.c
39 lines (36 loc) · 1.46 KB
/
convert_float.c
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
33
34
35
36
37
38
39
/* ************************************************************************** */
/* */
/* :::::::: */
/* convert_float.c :+: :+: */
/* +:+ */
/* By: jsaariko <[email protected]> +#+ */
/* +#+ */
/* Created: 2020/03/06 17:51:25 by jsaariko #+# #+# */
/* Updated: 2020/03/14 12:01:34 by jsaariko ######## odam.nl */
/* */
/* ************************************************************************** */
#include "ft_printf.h"
#include <float.h>
char *convert_float(t_printf_arg **arg)
{
char *neg;
char *final;
if ((*arg)->precision == -1)
(*arg)->precision = 6;
final = ft_ftoa((*arg)->arg.f, (*arg)->precision);
if (!final)
return (NULL);
(*arg)->arg_width = ft_strlen(final);
if ((*arg)->arg.f < 0
|| (1 / (*arg)->arg.f < -FLT_MAX && (*arg)->arg.f == 0))
{
neg = (char *)ft_calloc((*arg)->arg_width + 1, sizeof(char));
if (!neg)
return (NULL);
ft_memset(neg, '0', 1);
ft_memcpy(neg + 1, final + 1, (*arg)->arg_width - 1);
free(final);
return (neg);
}
return (final);
}