10

Cで浮動小数点数を使用するたびに表示される小数点以下の桁数を変更したいのですが、それはでFLT_DIG定義された値と関係がありますfloat.hか?もしそうなら、どうすればそれを6から10に変更できますか?

0.000000実際の値が。のような数値を取得しています0.0000003455

4

4 に答える 4

18

ここには 2 つの個別の問題があります: 格納されている浮動小数点数の精度。これはfloatvsdoubleを使用して決定されます。次に、出力される数値の精度があります。

float foo = 0.0123456789;
printf("%.4f\n", foo);  // This will print 0.0123 (4 digits).

double bar = 0.012345678912345;
printf("%.10lf\n", bar);  // This will print 0.0123456789
于 2012-10-06T16:30:42.687 に答える
0

私はこの問題を実験しましたが、float では大きな精度が得られないことがわかりました。しかし、double を使用すると、正しい答えが得られます。小数点以下 10 桁までの精度については %.10lf に言及するだけです

于 2016-02-27T16:29:21.903 に答える
-1

@kosmoplan - 良い質問をありがとう!

@epsalon - 良い反応をありがとう。私も最初に考えたのは、「フロート」対「ダブル」でした。私は間違っていました。実際には「printf/format」の問題であることに気づき、頭を悩ませました。よくできた!

最後に、いくつかの長引く周辺論争を終わらせるために:

/*
 SAMPLE OUTPUT:
  a=0.000000, x=0.012346, y=0.012346
  a=0.0000003455, x=0.0123456791, y=0.0123456789
 */
#include <stdio.h>

int
main (int argc, char *argv[])
{
  float  x = 0.0123456789, a = 0.0000003455;
  double y = 0.0123456789;
  printf ("a=%f, x=%f, y=%lf\n", a, x, y);
  printf ("a=%.10f, x=%.10f, y=%.10lf\n", a, x, y);
  return 0;
}
于 2012-10-06T19:00:54.633 に答える
-1

精度が不足しています。小数点以下の桁数を増やしたい場合は、doubleデータ型を使用してください。

また、printf()&coを使っているようです。数値を表示するには - doubles の代わりにs を使用することにした場合は、書式指定子を からにfloat変更することを忘れないでください- これは double 用です。%f%lf

于 2012-10-06T16:25:11.663 に答える