C# 字符串到浮点与双转换

C# 字符串到浮点与双转换,c#,numbers,C#,Numbers,为什么fvalue1 123456792是在执行了以下代码行之后出现的 float fvalue1 = Convert.ToSingle("123456789", CultureInfo.InvariantCulture); 按预期转换为双重工作: double dvalue1 = Convert.ToDouble("123456789", CultureInfo.InvariantCulture); float没有表示123456789所需的精度,而double有。您刚刚发现了double

为什么fvalue1 123456792是在执行了以下代码行之后出现的

float fvalue1 = Convert.ToSingle("123456789", CultureInfo.InvariantCulture);
按预期转换为双重工作:

double dvalue1 = Convert.ToDouble("123456789", CultureInfo.InvariantCulture);

float没有表示123456789所需的精度,而double有。

您刚刚发现了double类型存在的原因-它的精度比float更好


查看以下这些类型之间的差异:

@Uwe I am。仍然需要学习不要在我的语言中使用不必要的限定词:)@dlev你能解释一下,为什么这里的精度是相关的,因为数字没有小数点,只是一个整数?@Uwe:这个数字肯定包含小数点。记住浮点数是如何存储的。浮点数是二进制数1.0101010101010乘以2^x的整数x。浮点数是一个符号位,一个表示指数的整数,以及“1”之后的数字。@Uwe:如果你想了解有关本福德定律的基本知识和一些有趣的事实,请参阅我的浮点算术系列。另请注意
双d=123456789;浮点数f=(浮点数)d;//f是123456792