在C#标准中说:
从int,uint,long或ulong到float和from long或者的转换 ulong to double可能会导致精度损失,但永远不会导致 损失
任何人都可以解释一下这意味着什么幅度?给定 一个数字我怎么能计算它的大小? (即长或 int )。
答案 0 :(得分:2)
例如:
var a = Int64.MaxValue; // a = 9223372036854775807L
var b = (float)a; // b = 9.223372037e+18
a和b具有相同的数量级,它们彼此非常接近,但它们不相等......
基本上长(Int64)可以将整数表示为特定范围内的精确精度。浮点类型会牺牲精度,因此它们可以表示更大范围的数字,也可以表示分数。所以.net中的所有积分类型都适合范围意义上的浮点数,但是你可能会放松精度(某个小数位后的数字可能不正确。但是" scale"(数量级) )数字和一些更有效的数字将被保留...
答案 1 :(得分:-1)
似乎不清楚the spec you quoted所指的是什么“幅度”,它实际上应该是“数量级”。
自Dictionary.com defines "magnitude"`as:
数量的数字特征并形成基础 比较相似的数量,如长度。
任何数字的大小通常称为“绝对值”或 “模数”,用| x |表示。
你可以得出结论,规范是说它是由变量代表的数量或实际值。但是,正如其他人在此处正式指出的那样,情况并非如此。
通过运行一个简单的测试(就像其他人已经完成的那样),这个事实就变得很明显了:
long x = 8223372036854775807; // arbitrary long number
double y = x; // implicit conversion to double
long z = Convert.ToInt64(y); // convert back to int64 (a.k.a. long)
System.Diagnostics.Debug.Print(x.ToString());
System.Diagnostics.Debug.Print(z.ToString());
这会产生输出:
8223372036854775807
8223372036854775808
因此,从中可以看出,规范虽然模糊且不精确,不意味着字典或维基百科定义的“幅度”的定义,但更接近于定义"order of magnitude"。具体做法是:
数量级以10的幂表示。
和
数量级用于进行近似比较。
和
两个相同数量级的数字具有大致相同的比例。
与所讨论的C#规范以及我们从测试中看到的结果相符。