C#中float类型的最大值

24

当我这样做时:

float x = float.MaxValue;

我得到了结果:3.40282347E+38

E+38是什么?我怎样才能表示没有这个符号的最大数?

MSDN说范围是:±1.5 × 10^−45 到 ±3.4 × 10^38,但这并没有帮助我。


1
您希望将其表示为字符串吗?“表示”是什么意思? - Adriaan Stander
10个回答

39

没问题。如果你想要逗号,使用“#,#”或“N”。 - Dan
4
“整数”是340282346638528859811704183484516925440。 - Alexey Frunze
@Dan,我在类似这样的问题中看到过最好的答案。你能展示一下如何用C++实现吗? - H Aßdøµ

13

这被称为E-表示法(指数表示法),通常与科学计数法一起使用。

来自维基百科上有关科学计数法中的E表示法部分

由于类似于10^7这样的上标指数不能总是方便地显示,因此经常使用字母E或e来代表乘以10的幂次方(写作“x 10 ^ b”),并且后面跟着指数值。

因此,3.40282347E+38等于3.40282347 * 1038,可读作“3.40282347乘以10的38次方”。


6

请尝试下面的代码:

float f = float.MaxValue;
Console.WriteLine("Origianl Value: " + f);
Console.WriteLine("With Zeros:" + f.ToString("0"));

数值

Origianl Value: 3.402823E+38
With Zeros:340282300000000000000000000000000000000

3

That is Scientific Notation.

5E+2 = 
5 x 10 ^ 2 = 
5 x 10 * 10 = 
5 * 100 =
500

换句话说,这就是你需要移动小数点来计算结果的位数。拿5举例,把它向左移2位,就变成了500。在你的例子中,你需要把你的数字3.40282347向左移动38个十进制位!

1

不带指数的浮点数的最大值为:340282356779733661637539395458142568447.9f


我认为C#编译器允许您将其定义为常量,但在编译后它会被截断为float.maxvalue。 - Alexander Higgins

1

1

这大约是340 000 000 000 000 000 000 000 000 000 000 000 000。

如果您使用丹的代码,您将得到此结果:

340282300000000000000000000000000000000

0

展示使用 ToString 显示 float.MaxValue 的回答是不正确的。

这些答案声明 float.MaxValue 为: var f1 = 340282300000000000000000000000000000000f;

这只是 C# 将 float.MaxValue 转换为字符串时产生的结果。

然而,float.MaxValueSystem.Single 中的定义为 3.40282347E+38F

因此,实际的答案是:

var f2 = 340282347000000000000000000000000000000f;

还要注意的是,编译错误将允许使用高于此值的常量值作为 float。但是,在编译时,C# 将这些值截断为 float.MaxValue。例如:

var f3 = 340282356699999999999999999999999999999f;
var f4 = 340282356760000000000000000000000000000f;
var f5 = 340282356779733661637539395458142568447.9f;

这里的 f5 (340282356779733661637539395458142568447.9f) 是你可以定义的实际最大常量。同样,它被截断为 float.MaxValue

所有这些都可以进行验证:

var equals_1 = f1 == f; // false
var equals_2 = f2 == float.MaxValue; // true
var equals_3 = f3 == float.MaxValue; // true
var equals_4 = f3 == float.MaxValue; // true
var equals_4 = f5 == float.MaxValue; // true

0

抱歉打扰了一个旧帖子,但是谷歌引导我来到这里,我没有找到令人满意的答案。我相信谷歌会引导其他人来到这里。

float.h库包括c中float和其他类型的最大值。FLOAT_MAX等于340282346638528859811704183484516925440,即float可以存储的最大值。

我不是C语言专家,但我想象这个值是通用的,不会依赖于x32或x64操作系统。


1
(a) FLT_MAX -- 而不是 FLOAT_MAX -- 实际上会因系统或编译器而异,尽管它至少为 1E+37。 (b) 这个问题是关于 C#,而不是 C。 - Paul Roub
首先,这应该是一个独立的问题。其次,IEEE浮点值的最大值由国际标准定义。在32位空间内不可能存储“所有范围内的值”,并且当值大于约2^24时会出现精度损失--分数值也会出现类似的精度损失。这是因为可用的二进制存储空间,而.NET遵循IEEE 754-1985舍入规则。2008年发布了一项新标准。无论哪种方式,float可以存储大于“340282346638528859811704183484516925440”的值,但会有显著的精度损失。 - Shaun Wilson
这并不是特定语言或平台/架构相关的。各种来源中提供常量的选择不受IEEE标准的支配,因此会有所不同。按规范,您C发行版中的FLT_MAX在技术上是不正确的,它的值过大,无法存储在32位空间中,必然会被舍入。在32位空间(无符号)中可存储的最大正整数为4,294,967,295(任何大于此值的数都需要牺牲精度)。 - Shaun Wilson

0

这是一个老问题,但以下是字符串格式的最小值和最大值。

Using float.Parse
-340282356779733642999999999999999999999 to 340282356779733642999999999999999999999
Using float.MinValue.ToString("#") and float.MaxValue.ToString("#")
-340282300000000000000000000000000000000 to 340282300000000000000000000000000000000
Using float.MinValue.ToString() and float.MaxValue.ToString()
-3.402823E+38 to 3.402823E+38

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接