2023年2月14日星期二

C atof 字串轉浮點數

atof() — Convert Character String to Float

IBM說明

The atof() function converts a character string to a double-precision floating-point value.

The input string is a sequence of characters that can be interpreted as a numeric value of the specified return type. The function stops reading the input string at the first character that it cannot recognize as part of a number. This character can be the null character that ends the string.

我的理解:

將字串轉成倍精度浮點數值型態,只要字串是有意義可被解讀的(一般的小數點表示與科學記號表示),並符合圖片的格式皆可轉換。

下列會以正的浮點數,負的浮點數,科學記號表示分別呈現,使用float型態儲存轉換結果


(字串接受格式)

程式碼

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

int main(void)
{
    char *strnumber = " 123.345";
    float number_out;

    number_out = atof(strnumber);
    printf("Ex1.number_in:\"%s\"\t,number_out:%f\n", strnumber, number_out);

    strnumber = " 12.345E-5";
    number_out = atof(strnumber);
    printf("Ex2.number_in:\"%s\"\t,number_out:%e\n", strnumber, number_out);

    strnumber = "-123.345";
    number_out = atof(strnumber);
    printf("Ex3.number_in:\"%s\"\t,number_out:%f\n", strnumber, number_out);

    strnumber = "-12.345E-5";
    number_out = atof(strnumber);
    printf("Ex4.number_in:\"%s\"\t,number_out:%e\n", strnumber,  number_out);
}

執行結果


根據輸出結果,我們可以觀察到

Ex1. 字串123.345經過轉換再印出來的結果為123.345.001

Ex2. 字串12.345E-5經過轉換再印出來的結果為1.2345e-004

Ex3. 字串-123.345經過轉換再印出來的結果為123.345.001

Ex4. 字串-12.345E-5經過轉換再印出來的結果為-1.234500e-004

那為甚麼有些後面會冒出一個1?原因是浮點數的表示方式與整數不一樣,才會有此現象

參考資料

https://www.ibm.com/docs/en/i/7.4?topic=functions-atof-convert-character-string-float#itof

沒有留言:

發佈留言

打賞按讚