在C#中。我有一个精度为20位的double(我从数据库中提取的)。在VisualStudio(使用QuickWatch)中,我可以看到double值=0.00034101243963859839。我想在文本框中显示此值,然后在将其取出并将其转换回double值时使其保持相同的值。但是我总是丢最后两位数我试过以下方法:doubled=0.00034101243963859839;strings=d.ToString();strings2=d.ToString("F20");strings3=d.ToString("0.00000000000000000000");--200'sstri
我有一个double"138630.78380386264",我想将它转换为小数,但是当我这样做时,我要么通过强制转换,要么通过使用Convert.ToDecimal()我失去了精度。这是怎么回事?decimal和double都可以保存这个数字:doubledoub=double.Parse("138630.78380386264");decimaldec=decimal.Parse("138630.78380386264");stringdecs=dec.ToString("F17");stringdoubse=DoubleConverter.ToExactString(doub);
我需要使用unsigneddouble但事实证明C#不提供这种类型。有人知道为什么吗? 最佳答案 正如AndersForsgren所指出的,IEEE规范中没有无符号double(因此C#中也没有)。调用Math.Abs()总是可以得到正值你可以将一个double包装在一个结构中并在那里强制执行约束:publicstructPositiveDouble{privatedouble_value;publicPositiveDouble(){}publicPositiveDouble(doubleval){//ortruncate/tak
我正在运行NUnit测试来评估一些已知的测试数据和计算结果。这些数字是浮点double,所以我不希望它们完全相等,但我不确定如何在给定精度下将它们视为相等。在NUnit中,我们可以与固定公差进行比较:doubleexpected=0.389842845321551d;doubleactual=0.38984284532155145d;//reallycomesfromadataimportExpect(actual,EqualTo(expected).Within(0.000000000000001));这对于小于零的数字来说效果很好,但随着数字的增长,公差确实需要改变,所以我们总是关
我想要在C#中对double值进行舍入的方法。它需要能够将double值舍入为任何舍入精度值。我手头的代码如下:publicstaticdoubleRoundI(doublenumber,doubleroundingInterval){if(roundingInterval==0.0){return;}doubleintv=Math.Abs(roundingInterval);doublesign=Math.Sign(number);doubleval=Math.Abs(number);doublevalIntvRatio=val/intv;doublek=Math.Floor(val
我在数据库中有两个nvarchar字段来存储DataType和DefaultValue,我有一个DataTypeDouble和英文格式的值为65.89875。现在我希望用户根据所选的浏览器语言格式查看值(英语中的65.89875应显示为德语中的65,89875)。现在,如果用户从德语格式编辑为65,89875,相当于英语中的65.89875,而其他用户从英语浏览器中查看,则为6589875。发生这种情况是因为在数据库中它在nvarchar列中存储为65,89875并且当使用英语文化转换时它变为6589875因为它将,视为分隔符,它是德语的小数运算符.我如何让它适用于所有浏览器?
我一直在努力使打印出来的答案精确到小数点后两位。所有涉及的数学都必须保持两位小数的格式。我已经尝试了一些事情,但我不确定要改变什么才能使这项工作成功。doublepdt1=239.99;doublepdt1Total;doublepdt2=129.75;doublepdt2Total;doublepdt3=99.95;doublepdt3Total;doublepdt4=350.89;doublepdt4Total;doublewage=200;doublepercentage=9;doubletotal;doubleanswer;doublei=100;doublea;doubleb
像我这样的问题是asked,但我的有点不同。问题是,“为什么C#中的System.Double和System.Int64等类型不允许使用volatile关键字?”乍一看,我回答了我的同事,“嗯,在32位机器上,这些类型至少需要两次滴答才能进入处理器,而.Net框架有意抽象出特定于处理器的细节像那样。”他对此回应说:“如果它因为特定于处理器的问题而阻止您使用某项功能,那么它就不是抽象任何东西!”他暗示处理器特定的细节不应该显示给使用框架的人,该框架从程序员那里“抽象”了这样的细节。因此,框架(或C#)应该抽象出那些并做它需要做的事情来为System.Double等(无论是信号量、内存屏障
问题总结:对于一些十进制值,当我们将类型从decimal转换为double时,会在结果中添加一个小分数。更糟糕的是,可能有两个“相等”的十进制值在转换时会产生不同的double值。代码示例:decimaldcm=8224055000.0000000000m;//dcm=8224055000doubledbl=Convert.ToDouble(dcm);//dbl=8224055000.000001decimaldcm2=Convert.ToDecimal(dbl);//dcm2=8224055000doubledbl2=Convert.ToDouble(dcm2);//dbl2=822
这是我想要实现的目标:如果double的小数位超过3位,我想截断第三位以外的所有小数位。(不要四舍五入。)Eg.:12.878999->12.878如果double少于3位小数,则保持不变Eg.:125->12589.24->89.24我遇到了这个命令:doubleexample=12.34567;doubleoutput=Math.Round(example,3);但是我不想圆。根据上面发布的命令,12.34567->12.346我想截断该值,使其变为:12.345 最佳答案 double没有小数位-它们不是基于小数位开头的。您可