C# .NET核心浮点变量don';t打印小数
我将C# .NET核心浮点变量don';t打印小数,c#,.net,ieee-754,C#,.net,Ieee 754,我将2097151.3赋值给浮点变量,应用程序只打印整数部分。可能的错误 public static void Main(string[] args) { float foo = 2097151.3F; Console.WriteLine(foo); // prints 2097151 Console.ReadKey(); } 我正在运行一个.NET核心控制台应用程序 不。浮点数从20世纪40年代就开始出现了。一个浮点数只适用于7位有效数字 距离2097151.3最
2097151.3
赋值给浮点变量,应用程序只打印整数部分。可能的错误
public static void Main(string[] args)
{
float foo = 2097151.3F;
Console.WriteLine(foo); // prints 2097151
Console.ReadKey();
}
我正在运行一个.NET核心控制台应用程序
不。浮点数从20世纪40年代就开始出现了。一个
浮点数
只适用于7位有效数字
距离2097151.3
最近的float
是2097151.25
,而WriteLine
非常聪明,知道这一点,因此它会相应地截断
如果你想要精确的十进制值,那么就使用
decimal
类型。请参见精度规格-只有7位可能的重复,所以问题是如果我实际上是2097151.25
@HimBromBeere,为什么WriteLine
会截断该值:因为“笑话”数字是不相关的,而C是合理的。如果必须,您可以调整fomatter以生成所有数字。如果一个浮点(我的浮点是2097151.3)只能存储7个数字(2097151),那么您为什么要说2097151.25?@Joe,因为“7个数字”只是一个近似值。浮点数最多可以存储24位二进制数字(技术上是23位,但在许多情况下基本上是免费的隐式数字),计算结果大约是7位十进制数字。