おっと、この回答は C# ではなく C に関するものです。
言語にはこれに関する類似点があるため、C#の洞察を提供する可能性があるため、そのままにしておきます。
float に格納されている正確な値を出力するにはどうすればよいですか?
// Print exact value with a hexadecimal significant.
printf("%a\n", some_float);
// e.g. 0x1.99999ap-4 for 0.1f
a の値をfloat10 進数で表示するには、他のすべての と十分に区別できる小数点以下の桁数を指定しますfloat。
int digits_after_the_decimal_point = FLT_DECIMAL_DIG - 1; // e.g. 9 -1
printf("%.*e\n", digits_after_the_decimal_point, some_float);
// e.g. 1.00000001e-01 for 0.1f
すべての小数点以下の桁数で値を 10 進数で出力するのは難しく、ほとんど必要ありません。コードはより高い精度を使用できます。特定のポイント (たとえば、有効桁数 20 桁)big_valueを超えると、下位桁の正確性が失われる可能性がありprintf()ます。この誤りは、C およびIEEE 754で許容されます。
int big_value = 19; // More may be a problem.
printf("%.*e\n", big_value, some_float);
// e.g. 1.0000000149011611938e-01 for 0.1f
// for FLT_TRUE_MIN and big_value = 50, not quite right
// e.g. 1.40129846432481707092372958328991613128026200000000e-45
all のすべての小数点以下の桁数で値を 10 進数で出力するfloatには、ヘルパー関数を記述します。 例。
// Using custom code
// -FLT_TRUE_MIN
-0.00000000000000000000000000000000000000000000140129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125