FreeBASIC  0.91.0
str_convto_flt.c
Go to the documentation of this file.
1 /* str$ routines for float and double
2  *
3  * the result string's len is being "faked" to appear as if it were shorter
4  * than the one that has to be allocated to fit _itoa and _gvct buffers.
5  */
6 
7 #include "fb.h"
8 
9 
10 /*:::::*/
12 {
13  FBSTRING *dst;
14 
15  /* alloc temp string */
16  dst = fb_hStrAllocTemp( NULL, 7+8 );
17  if( dst != NULL )
18  {
19  size_t tmp_len;
20 
21  /* convert */
22  sprintf( dst->data, "%.7g", num );
23 
24  tmp_len = strlen( dst->data ); /* fake len */
25 
26  /* skip the dot at end if any */
27  if( tmp_len > 0 )
28  {
29  if( dst->data[tmp_len-1] == '.' )
30  {
31  dst->data[tmp_len-1] = '\0';
32  --tmp_len;
33  }
34  }
35  fb_hStrSetLength( dst, tmp_len );
36  }
37  else
38  dst = &__fb_ctx.null_desc;
39 
40  return dst;
41 }
42 
43 /*:::::*/
45 {
46  FBSTRING *dst;
47 
48  /* alloc temp string */
49  dst = fb_hStrAllocTemp( NULL, 16+8 );
50  if( dst != NULL )
51  {
52  size_t tmp_len;
53 
54  /* convert */
55  sprintf( dst->data, "%.16g", num );
56 
57  tmp_len = strlen( dst->data ); /* fake len */
58 
59  /* skip the dot at end if any */
60  if( tmp_len > 0 )
61  {
62  if( dst->data[tmp_len-1] == '.' )
63  {
64  dst->data[tmp_len-1] = '\0';
65  --tmp_len;
66  }
67  }
68  fb_hStrSetLength( dst, tmp_len );
69  }
70  else
71  dst = &__fb_ctx.null_desc;
72 
73  return dst;
74 }