INIファイルへの浮動小数点の読み書き – プログラミング – Home

INIファイルへの浮動小数点の読み書き
 
通知
すべてクリア

INIファイルへの浮動小数点の読み書き


ようへー
 ようへー
(@ようへー)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

INIファイルについての質問です。
環境はVC++6.0、WinXPです。

文字列や数値(整数)を読み書きする関数はありますが、floatやdoubleの浮動小数点を読
み書きする関数って無いんですかね?

Get(Write)ProfileBinaryを見つけて試してみたのですが、デバック時にコンパイルは成
功するのですが、「Debug Assetion Failed!」のエラーが出てしまします。

無理やり整数にするとGet(Write)ProfileIntを使って読み書きは出来てます。

何か良い関数や方法は無いですか?
よろしくお願いします。


引用解決済
トピックタグ
ようへー
 ようへー
(@ようへー)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

追加です。

現在はMFCを使用しています。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

3.14という小数を3.14という文字列として扱えば・・・


返信引用
wood
 wood
(@wood)
ゲスト
結合: 23年前
投稿: 895
 

>INIファイルについての質問です。
INIファイルって「テキスト形式ファイル」のもの多いですけど
読み書きしようとしているデータの1行を具体的に
この掲示板に書き込むこと出来ませんか?
あまり難しいこと考えなくても良いかもしれないので...


返信引用
sara
 sara
(@sara)
ゲスト
結合: 23年前
投稿: 99
 

sugarさんの方法が普通だと思いますが、精度などを気にしたくないならこんなのはどうでしょ
う?
無理やり整数にするというやり方と同じでしたらごめんなさい。

union UTypeChange32
{
float m_float;
int m_int;
};
union UTypeChange64
{
double m_double;
__int64 m_int64;
};

void WriteProfileFloat( LPCTSTR lpszSection, LPCTSTR lpszEntry, float fValue )
{
UTypeChange32 data;
data.m_float = fValue;
AfxGetApp()->WriteProfileInt( lpszSection, lpszEntry, data.m_int );
}

float GetProfileFloat( LPCTSTR lpszSection, LPCTSTR lpszEntry, float fDefault )
{
UTypeChange32 dataDefault, dataRet;

dataDefault.m_float = fDefault;
dataRet.m_int = (int)AfxGetApp()->GetProfileInt( lpszSection, lpszEntry,
dataDefault.m_int );
return dataRet.m_float;
}

void WriteProfileInt64( LPCTSTR lpszSection, LPCTSTR lpszEntry, __int64 nValue )
{
char buf[24];
AfxGetApp()->WriteProfileString( lpszSection, lpszEntry, _i64toa( nValue,
buf, 10 ) );
}

__int64 GetProfileInt64( LPCTSTR lpszSection, LPCTSTR lpszEntry, __int64
nDefault )
{
CString s = AfxGetApp()->GetProfileString( lpszSection, lpszEntry, " );
if( s.IsEmpty() )
return nDefault;
return _atoi64( (LPCTSTR)s );
}

void WriteProfileDouble( LPCTSTR lpszSection, LPCTSTR lpszEntry, double dValue )
{
UTypeChange64 data;
data.m_double = dValue;
WriteProfileInt64( lpszSection, lpszEntry, data.m_int64 );
}

double GetProfileDouble( LPCTSTR lpszSection, LPCTSTR lpszEntry, double
dDefault )
{
UTypeChange64 dataDefault, dataRet;

dataDefault.m_double = dDefault;
dataRet.m_int64 = GetProfileInt64( lpszSection, lpszEntry,
dataDefault.m_int64 );
return dataRet.m_double;
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました