2010-11-29 8 views
0

後、最大2ヶ所に倍増する、それがファイルに が来ると完全にchar型のポインタに入りますが、この関数にそれを送信した後:変換はchar *私は、ファイルからのトークンを読んでいる時点

double CharToDouble(char *ptemp) 
{ 
if(ptemp != NULL) 
{ 
    if(ptemp[0] == '0') 
    return atof(ptemp); 
    else 
    return atof(ptemp)/100; 
} 
return 0; 
} 
私は、この関数の結果を保存ダブルスで取得してい

値は、それが中に、お金の問題だ ..私はそれがchar *のようにecaxtlyになりたい、そのような0.6600000000001 0.280000000000000000

とかのようなものですセント。

+0

FYI、あなたのコードを書式設定するには、引用符をブロックするのではなくCTRL + Kまたは101アイコンを押します。 – SiegeX

答えて

0

それは通貨だ場合は、100を掛けして整数に切り捨て、その代わりに123.45の、あなたは12345

注意があります:floatとdoubleが唯一の特定の精度(機械精度)まで正確であるが、すべての実数を浮動小数点形式でエンコードすることはできないためです。あなたは正しい形式の出力にしか興味たら、あなたは正しいprintfのコマンドを使用する必要があります

、すなわち

double currency_value = 9.95; 
printf("Currency: %.2f", currency_value) 

より多くを学ぶために、「書式文字列」を検索します。 %.2fは、カンマ(f)の後に固定位置の浮動小数点数が必要であり、この位置はカンマ(2)の後の2番目の数字であることを示しています。

+0

しかし、atof(char * x)を使ってdoubleに転送すると、0.78000000000001のdoubleにchar 0.78が転送されることがありますが、これは問題なく処理できますが、0.85をdouble 0.8499999999999999991などに転送することもあります。それは.. –

+0

@Kobby:だから、あなたはラウンドする必要があります、必要はありません "ラウンドダウン"。入力をクリーンアップするには、math.c関数 'round(double)'を試してください。 'printf("%。2f "、x)'も出力されますので、0.8499 ...は0.85と表示されます。 –

関連する問題