Tag: 舍入

Math.Round没有保持尾随零

我需要将所有值四舍五入到小数点后两位。 因此1.401应该舍入到1.40,但Math.Round(value, 2)到1.4。 如何强制尾随零?

舍入最接近的0.5

我希望以这种方式完善 13.1, round to 13.5 13.2, round to 13.5 13.3, round to 13.5 13.4, round to 13.5 13.5 = 13.5 13.6, round to 14.0 13.7, round to 14.0 13.8, round to 14.0 13.9, round to 14.0 抱歉我需要以上述方式修改…这样做但不合适 doubleValue = Math.Round((doubleValue * 2), MidpointRounding.ToEven) / 2;

具有负参数的Math.Round

所有, 我试图将Borland C ++代码转换为C#。 在旧代码中,我看到以下内容: double a = RoundTo( b, -2 ); 看看Borland文档,我看到RoundTo()接受正和负参数的精度。 正数表示为10 ^ n,负数为10 ^ -n。 看看Math.RoundTo()的C#文档,我找不到一个引用是否接受负数的精度。 并且所有样本都带有正数。 在这种情况下转换代码的正确方法是什么? 我应该忘记这个标志并写下: double a = Math.Round( b, 2 ); 谢谢。

如何限制十进制数?

可能重复: 如何格式化小数 我怎样才能限制我的十进制数,这样我才能得到这个数字后的3位数? eg 2.774

对double进行转换是否始终返回相同的值?

铸造double float总是产生相同的结果,还是会有一些“四舍五入的差异”? 例如,是x in float x = (float)0.123456789d; 总是一样的价值? 将float浮动为double,然后将其转换为float,即。 (float)(double)someFloat ? 最感兴趣的是C#中的结果,但如果您对其他语言的工作原理有所了解,请随时分享。

为什么.Net在String.Format中使用与默认Math.Round()算法不一致的舍入算法?

我注意到C#/ .NET中存在以下不一致之处。 我想知道为什么会这样。 Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.04, Math.Round(1.04, 1)); Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.05, Math.Round(1.05, 1)); Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.06, Math.Round(1.06, 1)); Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.14, Math.Round(1.14, 1)); Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.15, Math.Round(1.15, 1)); Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.16, Math.Round(1.16, 1)); Console.WriteLine(); Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.04, Math.Round(1.04, 1, MidpointRounding.AwayFromZero)); Console.WriteLine(“{0,-4:#.0} | {1,-4:#.0}”, 1.05, Math.Round(1.05, 1, MidpointRounding.AwayFromZero)); Console.WriteLine(“{0,-4:#.0} […]

如何在MySQL中舍入DateTime?

我想以5分钟的分辨率将DateTime离散化。 我在C#中做过,但是如何将以下代码转换为MySQL? DateTime Floor(DateTime dateTime, TimeSpan resolution) { return new DateTime ( timeSpan.Ticks * (long) Math.Floor ( ((double)dateTime.Ticks) / ((double)resolution.Ticks) ) ); }

C#如何始终向下舍入到最接近的50

我已经对C#舍入进行了搜索,但未能找到我当前问题的答案。 我想要做的是总是向下舍入到最接近的50.我要舍入的所有值都是十进制的。 所以635.25将是600。 298.42将是250。 149.56将是100。 我看过math.round但是我怎么用它,所以它总是向下舍入到最接近的50并且从不向上?

.NET的Double.ToString方法中的Round-two错误

在数学上,考虑这个问题的有理数 8725724278030350 / 2**48 其中分母中的**表示取幂,即分母是2到48次幂。 (分数不是最低的,可以减少2.)这个数字可以完全表示为System.Double 。 它的十进制扩展是 31.0000000000000’49’73799150320701301097869873046875 (exact) 撇号不代表缺失的数字,而只是标记圆形到15的分数。 将执行17位数字。 请注意以下内容:如果此数字四舍五入为15位,则结果为31 (后跟十三个0秒),因为下一个数字( 49… )以4开头(意味着向下舍入)。 但如果该数字首先四舍五入为17位, 然后舍入为15位,则结果可能为31.0000000000001 。 这是因为第一轮舍入将49…数字增加到50 (terminates) (下一个数字为73… ),然后第二轮可能再次向上舍入(当中点舍入规则说“圆形”时远离零“)。 (当然,还有更多具有上述特征的数字。) 现在,事实certificate.NET的这个数字的标准字符串表示是”31.0000000000001″ 。 问题:这不是一个错误吗? 通过标准字符串表示,我们指的是由参数文件Double.ToString()实例方法生成的String ,它当然与ToString(“G”)生成的String相同。 一个有趣的事情是,如果你将上面的数字转换为System.Decimal那么你得到一个完全正确的31的decimal ! 请参阅此Stack Overflow问题 ,以讨论将Double为Decimal涉及首次舍入到15位数这一令人惊讶的事实。 这意味着转换为Decimal ToSting()正确的舍入值设置为15位数,而调用ToSting()则会生成不正确的舍入值。 总而言之,我们有一个浮点数,当输出给用户时,它是31.0000000000001 ,但是当转换为Decimal (其中29位可用)时,精确地变为31 。 这很不幸。 这里有一些C#代码供您validation问题: static void Main() { const double evil = 31.0000000000000497; string exactString = DoubleConverter.ToExactString(evil); […]

在c#中向下舍入到2位小数

如何将两位小数相乘并将结果四舍五入到小数点后两位? 例如,如果方程为41.75 x 0.1,则结果为4.175。 如果我在带小数的c#中执行此操作,它将自动舍入到4.18。 我想四舍五入到4.17。 我尝试使用Math.Floor,但它只是向下舍入到4.00。 这是一个例子: Math.Floor (41.75 * 0.1);