当前位置: C语言 -- 标准库 -- <stdlib.h> -- strfromd64

strfromd64函数


概要:
#include <stdlib.h>
#ifdef __STDC_IEC_60559_DFP__
    int strfromd64(char * restrict s, size_t n, const char * restrict format,
        _Decimal64 fp);
#endif

描述:

该函数将浮点数fp按参数format指定的格式转换,并将转换结果写入参数s指向的数组,最多可以向参数s指向的数组写入(n-1)个字符,并在写入字符末尾添加空字符。


该函数等价于:

snprintf(s, n, format, fp)

区别在于:

1、strfromd64函数的格式字符串应仅包含字符%、可选的精度(精度不能包含*字符。)以及转换说明符a、A、e、E、f、F、g、G中的一个。

2、strfromd64函数的转换说明符适用于函数后缀所指示的类型,而不是由长度修饰符指示。

3、strfromd64函数如果使用其它格式字符串将导致未定义行为。


参数:
char * restrict s

指向数组首元素的指针。数组必须足够大,能够容纳写入字符串。

size_t n

指定写入字符的最大数量,最大数量为(n-1),不包括末尾空字符。

const char * restrict format

指向格式字符串的指针。指向的格式字符串决定了浮点数如何解释和转换。

_Decimal64 fp

待转换的浮点数。


返回值:

如果n足够大,函数返回本应写入的字符数(不包括末尾的空字符。)。如果返回值是非负值,且小于n,空字符结尾的输出将完整地写入参数s指向的数组。


范例:
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 
/*函数strfromd64范例*/

#include <stdio.h>
#include <stdlib.h>

#define N 64

int main(void)
{
    #if __STDC_VERSION_STDLIB_H__ >= 202311L  && defined(__STDC_IEC_60559_DFP__)
        char s1[N];
        char s2[N];
        
        strfromd64(s1, N-1, "%E", 314.0dd);
        strfromd64(s2, N-1, "%F", 1.23dd);
        
        puts(s1);
        puts(s2);
    #else
        puts("The implementation does not support strfromd64 function.");
    #endif
    
    return 0;
}


可能输出:

3.140000E+02

1.230000

(注: 编译时实现还未支持strfromd64函数。)


相关内容:
strfromd32 将_Decimal32类型浮点数转换为字符串的函数。
strfromd128 将_Decimal128类型浮点数转换为字符串的函数。


主要参考资料:

1、ISO/IEC 9899:2024

2、en.cppreference.com : strfromf, strfromd, strfroml