バグ:浮動点小数を文字列化した際に出るかもしれない問題

Posted: 2013年07月22日

数値の文字列化により問題となる処理を紹介します。

プログラムプログラム:

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

 int main(int argc, char *argv[])
 {
    double nVal = 1.2346789;
    char szVal[16];

    sprintf(szVal, "%lf", nVal);

    // 処理

    return 0;
 }

このプログラムにどのように数値の文字列化処理に問題が存在すると思いますか?

  • 桁指定が出来ないため問題となる場合がある

fcvt

改善版プログラム改善版プログラム:

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

 int main(int argc, char *argv[])
 {
    int  decimal, sign;
    double nVal = 1.2346789;
    char szVal[16];

    sVal = _fcvt(nVal, 5, &decimal, &sign);

    // 処理

    return 0;
 }

解説解説:

fcvt関数を用いることで
指定した小数点以下の桁数が指定可能です。

小数点がない値が返却され
decimalに小数点の位置が返却されます。

つまり小数点が必要な場合は、自身で追加する必要があります。

領域は、自動確保されるため
小数点の桁サイズには上限があるのが難点

その場合は、_fcvt_s関数を用いると
独自に確保した領域で処理が行えるため

覚えていたほうが…
というか_s付きは、積極的に使用するほうがいいとは思いますが

カテゴリー: バグ, プログラム | タグ: , , , | コメント無し »

コメント