Tag: double

IFormatProvider从double到string的科学转换 – 位数

我有从double到string的转换问题。 我要转换: double值:0.0772486324655191 字符串值:0.0772486324655191 如果长度大于小数点后的16位数,我希望它像这样: double值:0.00063500244832493823 字符串值:6.3500244832493823e-004 我试图用IFormatProvider模式转换它: 0.0000000000000000e000 但第一种情况的结果是 7.7248632465519100e-002 如何获取双向量中的位数? 或者更好:我应该如何正确使用格式提供程序? String specifier; CultureInfo culture; specifier = “0.0000000000000000e000”; culture = CultureInfo.CreateSpecificCulture(“en-US”); Console.WriteLine(DoubleMirrored[0].ToString(specifier, CultureInfo.InvariantCulture));

字符串格式:负/正浮点数

我怎样才能在C#中使用String.Format ,所以双打显示如下: example: ___-1.000 ____1.000 __100.123 -1000.321 _1000.214 等等… 其中_是空格( ” ” ); 我所能做的就是String.Format(“{0:F3}”, -123.321);

Double.TryParse()忽略NumberFormatInfo.NumberGroupSizes?

我想知道我是否遗漏了某些东西……我正在按照标准的英国文化运作。 Double result = 0; if (Double.TryParse(“1,2,3”, NumberStyles.Any, CultureInfo.CurrentCulture, out result)) { Console.WriteLine(result); } 预期的产出将毫无意义……“1,2,3”不应该解析为双倍。 不过确实如此。 根据.NET 2.0 MSDN文档 AllowThousands表示数字字符串可以有组分隔符; 例如,将数百个与数千个分开。 有效的组分隔符由NumberFormatInfo的NumberGroupSeparator和CurrencyGroupSeparator属性确定,每个组中的位数由NumberFormatInfo的NumberGroupSizes和CurrencyGroupSizes属性确定。 允许数千包含在NumberStyles.Any中。 对于我的文化,NumberGroupSizes是3。 这只是Double.Parse中的一个错误吗? 似乎不太可能,但我无法发现我做错了什么……

定义没有固定大小的双数组?

您好我的c#Arrays有问题。 我需要一个数组来存储一些数据…我的代码是那样的 double[] ATmittelMin; ATmittelMin[zaehlMittel] = Gradient(x, xATmax, y, yATmax); 但编译器说:未定义var如何定义没有固定大小的双数组? 非常感谢!

如何舍入双值但保持尾随零

在C#中,我想要一个将给定的double舍入到给定的小数位数的函数。 我总是希望我的函数返回一个给定小数位数的值(可以是一个字符串)。 如有必要,需要添加尾随零。 例: string result = MyRoundingFunction(1.01234567, 3); // this must return “1.012” 这很容易,它只是四舍五入并转换为字符串。 但问题出现了: string result2 = MyRoundingFuntion(1.01, 3); // this must return “1.010” 有没有方便/标准的方法来做到这一点,还是我手动需要添加尾随零? 任何帮助表示赞赏。 请注意,在现实生活中,我不能硬编码小数。

在C#中等效的Double.doubleToLongBits?

有一个Java方法Double.doubleToLongBits ,它基本上得到一个double并返回一个具有相同位的long 。 我怎么能在C#中做到这一点? 谢谢

无符号双人

我需要使用unsigned double,但事实certificateC#不提供这样的类型。 有谁知道为什么?

DoubleUtil.DoubleToInt(double val)如何工作?

MS.Internal.DoubleUtil包含该函数 public static int DoubleToInt(double val) { return (0 < val) ? (int)(val + 0.5) : (int)(val – 0.5); } 我想知道为什么这个’将’转换为整数?

为浮点比较选择Epsilon值

我的团队正在使用财务软件,它将货币价值暴露为C#浮点数的两倍。 有时,我们需要比较这些值,看它们是否等于零,或者是否属于特定限制。 当我注意到这个逻辑中的意外行为时,我很快就了解了浮点双精度中固有的舍入误差(例如1.1 + 2.2 = 3.3000000000000003)。 到目前为止,我主要使用C#小数来表示货币值。 我的团队决定使用epsilon值方法解决这个问题。 基本上,当你比较两个数字时,如果这两个数字之间的差异小于epsilon,它们被认为是相等的。 我们以下面文章中描述的类似方式实现了这种方法: https : //www.codeproject.com/Articles/383871/Demystify-Csharp-floating-point-equality-and-relat 我们的挑战是为epsilon确定合适的价值。 我们的货币值最多可以包含小数点右侧的3位数(比例= 3)。 这意味着我们可以使用的最大epsilon是0.0001(任何更大的东西都会被忽略)。 由于epsilon值应该很小,我们决定将它再移出一个小数点到.00001(只是为了安全,你可以说)。 C#双精度具有至少15位的精度,所以我相信如果小数点左边的数字小于或等于10位数(15 – 5 = 10,其中5是数字,则epsilon的值应该有效)数字epsilon位于小数点右侧)。 使用10位数字,我们可以将数值表示为数十亿,最高可达9,999,999,999.999。 我们可能有数亿的数字,但我们不希望达到数十亿,所以这个限制就足够了。 我选择这个epsilon值的理由是正确的吗? 我找到了很多讨论这种方法的资源,但是我找不到很多资源来提供选择epsilon的指导。

C#转换为小数

什么,如果有的话,是什么区别? decimal d = (decimal) myDouble; decimal d = new decimal(myDouble); decimal d = Convert.ToDecimal(myDouble);