草庐IT

double-elimination

全部标签

c# - 将 float 转换为 double 会丢失精度但不会通过 ToString

我有以下代码:floatf=0.3f;doubled1=System.Convert.ToDouble(f);doubled2=System.Convert.ToDouble(f.ToString());结果相当于:d1=0.30000001192092896;d2=0.3;我很好奇这是为什么? 最佳答案 这不是精度损失.3不是representableinfloatingpoint.当系统转换为它四舍五入的字符串时;如果你打印出足够多的有效数字,你会得到更有意义的东西。看得更清楚floatf=0.3f;doubled1=Syste

c# - 为什么 (int)double.NaN 和 (int)double.PositiveInfinity 为 0?

在C#中,如果您0/0,您会得到一个异常。但是如果你0.0/0或0.0/0.0你得到double.NaN和double.Infinity,分别。但是如果将这些结果转换为int,您将得到0。>(int)double.PositiveInfinity0>(int)double.NaN0为什么会这样?难道运行时不应该给出转换错误,因为无穷大显然不是零吗? 最佳答案 这取决于您所处的上下文类型。如果您使用checked上下文,您将得到一个异常。规范的相关部分是第6.2.1节:Foraconversionfromfloatordoubleto

c# - 获取下一个最小的 Double 数

作为单元测试的一部分,我需要测试一些边界条件。一种方法接受System.Double参数。有没有办法获得次小double值?(即将尾数减1个单位值)?我考虑过使用Double.Epsilon但这是不可靠的,因为它只是从零开始的最小增量,因此不适用于较大的值(即9999999999-Double.Epsilon==9999999999).那么需要什么样的算法或代码才能:NextSmallest(Doubled)...总是正确的。 最佳答案 如果您的数字是有限的,您可以在BitConverter类中使用几个方便的方法:longbits=

c# - NaN 对 double 意味着什么?

NaN和Infinity有什么区别?NaN什么时候出现?这是什么? 最佳答案 来自Wikipedia:Incomputing,NaN(NotaNumber)isavalueofthenumericdatatyperepresentinganundefinedorunrepresentablevalue,especiallyinfloating-pointcalculations.SystematicuseofNaNswasintroducedbytheIEEE754floating-pointstandardin1985,along

c# - 为什么 IsAssignableFrom() 不适用于 int 和 double?

这是错误的:typeof(double).IsAssignableFrom(typeof(int))这是错误的:typeof(int).IsAssignableFrom(typeof(double))但这行得通:doublea=1.0;intb=1;a=b;很明显double是可以从int赋值,但是框架IsAssignableFrom()弄错了。为什么?或者这是.NET中的一个错误,是由int和double的特殊性质引起的,它们没有继承关系但可以分配(单向)? 最佳答案 C#提供从int到double的隐式转换。这是语言的决定,不是

c# - 为什么 double.Parse 忽略零的符号?

例如,在:booleq=(1/double.Parse("-0.0"))==(1/-0.0);eq将为false。double.Parse必须经历一些麻烦才能显式忽略零符号,即使不这样做几乎不会导致问题。由于我需要原始表示,因此我必须编写自己的解析函数,该函数处理负零的特殊情况,并使用double.Parse处理其他所有内容。这不是什么大问题,但我真的很想知道他们为什么决定忽略零符号,因为在我看来不这样做并不是坏事。 最佳答案 我不知道为什么本身,但一个潜在的解决方案:如果你在开头看到一个-字符,解析字符串的其余部分并然后否定它。

c# - 从c#中的double中提取尾数和指数

有没有直接的方法从c#(或一般的.NET)中的double中获取尾数和指数?我找到了thisexample使用谷歌,但我不确定它会有多强大。是否可以在某些future版本的框架等中更改双重的二进制表示?我发现的另一种选择是使用System.Decimal而不是double并使用Decimal.GetBits()提取它们的方法。有什么建议吗? 最佳答案 二进制格式不应该改变——这肯定是对现有规范的重大改变。正如吉米所说,它被定义为IEEE754/IEC60559:1989格式。(C#3.0语言规范第1.3节;ECMA335第8.2.2

c# - 通过编译器生成的局部变量 : why is this failing? 隐式转换为具有可空结构的 System.Double

鉴于以下情况,为什么会抛出InvalidCastException?我不明白为什么它应该在错误之外(这是在x86中;x64在clrjit.dll中崩溃并出现0xC0000005)。classProgram{staticvoidMain(string[]args){MyDouble?my=newMyDouble(1.0);Booleancompare=my==0.0;}structMyDouble{Double?_value;publicMyDouble(Doublevalue){_value=value;}publicstaticimplicitoperatorDouble(MyDou

c# - 将 0.0 转换为 double 有什么问题?

当我尝试将0.0转换为double时出现InvalidCastException,为什么会这样?当我改为执行(float)value时没问题。 最佳答案 一般来说,当您将值类型放入对象(称为装箱)时,您需要将它拆箱到完全相同的值类型。您不能改为转换为另一种类型。这就是这里发生的事情。如果你真的想转换对象,你首先需要将它拆箱。假设您的原始值是一个float,然后再将其装箱到object中:doubled=(double)(float)value;或者使用别人提出的方法,使用Convert。这样做的好处是不必知道原始类型。

c# - 将 double 转换为 decimal 还是从 double 构造 "new"decimal 更好?

当从double转换为小数时,假设我的double可以表示为decimal...将double转换为小数是否更合适:(ExplicitNumericConversionsTable)(请注意,此条目错误地与前者相矛盾!)doublefoo=bar;decimalfoobar=(decimal)foo;还是调用decimal构造函数更合适:(DecimalConstructor)doublefoo=bar;decimalfoobar=newdecimal(foo);我倾向于使用decimal构造函数,但我想知道使用其中一个与另一个的原因。据我所知,唯一的区别是Decimal.MinVal