相关疑难解决方法(0)

为什么Convert.ToInt32()舍入到最接近的偶数,而不是最接近的整数?

查看Convert.ToInt32()它的msdn文档说明:

如果值在两个整数之间,则返回偶数; 也就是说,4.5转换为4,5.5转换为6.

http://msdn.microsoft.com/en-us/library/ffdk7eyz.aspx

为什么是这样?

当然,舍入到最接近的整数更合乎逻辑,不是吗?如果是这样,4.5将变为5,而5.5将变为6,这似乎更直观.

c# decimal int32 rounding

20
推荐指数
2
解决办法
1万
查看次数

在.net中,如何在Decimal和Double之间进行选择

我们前几天正在讨论这个问题,我希望有一个Stackoverflow问题,我会指点人们这样做.)

  • a Double和a有Decimal什么区别?
  • 何时(在什么情况下)你应该总是使用Double
  • 何时(在什么情况下)你应该总是使用Decimal
  • 什么是驱动因素的考虑在不属于上述两个阵营中的一个案例?

有很多问题与这个问题重叠,但他们倾向于询问某人在特定情况下应该做什么,而不是如何在一般情况下做出决定.

.net floating-point

18
推荐指数
2
解决办法
1089
查看次数

VB.Net中的Math.Round()有什么问题?

我在VB.Net中的Math.Round函数中有一个如此奇怪的情况

Math.Round((32.625), 2)
Run Code Online (Sandbox Code Playgroud)

结果:32.62

Math.Round((32.635), 2)
Run Code Online (Sandbox Code Playgroud)

结果:32.64

我需要32.63,但在这些情况下,该功能在不同的逻辑中工作.

我可以得到小数部分并做出我想做的事情.但是这不是太奇怪了,一个是向上走向更高,一个是向下走向更低.

那么如何从32.625获得32.63而不会弄乱小数部分呢?(作为数学的自然逻辑)

vb.net

16
推荐指数
1
解决办法
4万
查看次数

C#Rounding MidpointRounding.ToEven vs MidpointRounding.AwayFromZero

在C#里还有两位小数四舍五入策略的准确性任何差异MidpointRounding.ToEvenMidpointRounding.AwayFromZero?我的意思是两者都确保在四舍五入的数字中均匀分布,或者是一个舍入策略而不是表示与另一个相比的舍入数字?

c# rounding-error

15
推荐指数
2
解决办法
2万
查看次数

C#中的整数转换

        string[] strArray = new string[10] { "21.65", "30.90", "20.42", "10.00", "14.87", "72.19", "36.00", "45.11", "18.66", "22.22" };
        float temp = 0.0f;
        Int32 resConvert = 0;
        Int32 resCast = 0;
        for (int i = 0; i < strArray.Length; i++)
        {
            float.TryParse(strArray[i], out temp);
            resConvert = Convert.ToInt32(temp * 100);
            resCast = (Int32)(temp * 100);
            Console.WriteLine("Convert: " + resConvert + " ExplCast: " + resCast);
        }
Run Code Online (Sandbox Code Playgroud)

答案:

   Convert: 2165 ExplCast: 2164   // ??
   Convert: 3090 ExplCast: 3089   // ??
   Convert: 2042 ExplCast: 2042 …
Run Code Online (Sandbox Code Playgroud)

c# int

14
推荐指数
1
解决办法
3906
查看次数

在Paypal中进行货币转换舍入的正确方法是什么?

我正在构建一个与paypal集成的电子商务网站.

我们采取多种货币,所以我想确保(出于会计原因)我正确地执行货币转换的任何数学.

在将货币转换*乘以原始货币之后,我总是在小数点后面有大量的尾随数字.

有没有标准的方法来做到这一点?我应该截断还是圆?如果舍入1/1000小数将影响舍入1/100十进制,我是否需要多次舍入?

我应该做的事情如下:

Math.Round(Math.Round(x, 3), 2)
Run Code Online (Sandbox Code Playgroud)

我一直无法找到关于如何做到的好信息(希望美国和欧洲是一样的).

c# currency paypal decimal rounding

13
推荐指数
1
解决办法
1万
查看次数

"银行家的四舍五入"真的在数值上更稳定吗?

通过银行家的舍入我的意思是

  1. "绕到最近,连接到均匀"

按照IEEE 754的建议:

舍入到最接近的值; 如果数字中间下降,则使用偶数(零)最低有效位舍入到最接近的值.这是二进制浮点的默认值,也是十进制的推荐默认值.

据说该方法优于

  1. "圆到最近,与零相关"

理由是它"在对四舍五入的数字求和时最小化预期误差".显然,这是因为 "它不会受到负面或正偏差的影响,就像在大多数合理分布上从零方法的一半那样".

我不明白为什么会这样.直观地,如果0.0向零舍入,则0.5"应该"从零舍入(如方法2中所示).这样,相同数量的数字将朝向零并且远离零.换句话说,如果浮动数字用1个十进制数字表示,十个数字中的数字0.0,......,0.9五个将向下舍入,五个用方法2进行四舍五入.类似地1.0,... 1.9等等.

当然,浮点数用二进制尾数表示,但我认为上述推理仍然适用.请注意,对于IEEE 754双精度,整数和整数加半精度可以精确表示绝对值到2^52大约,因此这些精确值实际上会显示出来.

那么方法1如何更好?

language-agnostic floating-point rounding floating-accuracy

9
推荐指数
1
解决办法
1561
查看次数

SQL Server Reporting Services Round()函数

在SQL Server Reporting Services中生成的报告中发生了一些奇怪的事情,我希望我不会太愚蠢.我使用Round函数来获取整数.有时4.5会舍入到4而5.5会舍入到6.这是因为舍入方法吗?我用这个:

Round(Fields!GroupAverageAssessment.Value,0)
Run Code Online (Sandbox Code Playgroud)

如何定期舍入(4.5到5,3.5到4,6.5到7等等......)

谢谢

database sql-server

6
推荐指数
1
解决办法
4万
查看次数

VB.Net为什么Math.Round在第5轮到最近的偶数,我该怎么办呢?

为什么Math.Round(0.125,2)舍入到0.12?

Dim foo As Decimal
foo = Math.Round(0.125, 2)
Run Code Online (Sandbox Code Playgroud)

foo现在是0.12但它应该是0.13

我听说这是因为.Net中的某些标准是最接近的偶数,但这只是糟糕的数学.12.5将向下舍入到12,但13.5将向上舍入到14.有没有办法解决这个问题?

.net vb.net

6
推荐指数
1
解决办法
5099
查看次数

3
推荐指数
1
解决办法
526
查看次数