糟糕,这个答案与 C 相关,而不是 C#。
保留它,因为它可能提供 C# 洞察力,因为语言在这方面有相似之处。
如何打印存储在浮点数中的确切值?
// Print exact value with a hexadecimal significant.
printf("%a\n", some_float);
// e.g. 0x1.99999ap-4 for 0.1f
要打印 afloat
的十进制值,并与所有其他 具有足够独特的小数位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
打印所有小数位的十进制值是困难的 - 并且很少需要。代码可以使用更高的精度。超过某个点(例如 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
要打印所有小数位的十进制值float
,请编写一个辅助函数。 例子。
// Using custom code
// -FLT_TRUE_MIN
-0.00000000000000000000000000000000000000000000140129846432481707092372958328991613128026194187651577175706828388979108268586060148663818836212158203125