Tag: 四舍五入

Hysteresis Round用于解决由于噪声引起的“闪烁”值

背景:我们有一个嵌入式系统,使用10位模数转换器将线性位置(0 mm – 40 mm)从电位计电压转换为数字值。 ———————— 0mm | | 40 mm ———————— 我们向用户显示以1 mm为增量的线性位置。 防爆。 1mm,2mm,3mm等 问题:我们的系统可用于电磁噪声环境,这可能导致线性位置由于噪声进入ADC而“闪烁”。 例如,当电位计为39 mm时,我们将看到如下值:39,40,39,40,39,38,40等。 由于我们每1毫米四舍五入,如果值在1.4和1.6毫米之间切换,我们将看到1到2之间的闪烁。 建议的软件解决方案:假设我们无法更改硬件,我想在舍入值时添加一些滞后以避免这种闪烁。 这样: 如果该值目前为1mm,如果原始值为1.8或更高,则只能达到2mm。 同样,如果当前值为1mm,如果原始值为0.2或更低,则只能达到0mm。 我写了以下简单的应用来测试我的解决方案。 如果我走在正确的轨道上,或者您有任何建议,请告诉我。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PDFSHysteresis { class Program { static void Main(string[] args) { double test = 0; int curr = 0; Random random […]

在十进制上舍入扩展时出错 – 无法使用实例引用访问; 用类型名称来限定它

我已经多次使用扩展方法,并没有遇到这个问题。 任何人都有任何想法,为什么这会引发错误? /// /// Rounds the specified value. /// /// The value. /// The decimals. /// public static decimal Round (this decimal value, int decimals) { return Math.Round(value, decimals); } 用法: decimal newAmount = decimal.Parse(“3.33333333333434343434”); this.rtbAmount.Text = newAmount.Round(3).ToString(); newAmount.Round(3)抛出了编译器错误: Error 1 Member ‘decimal.Round(decimal)’ cannot be accessed with an instance reference; qualify it with a type […]

如何舍入小数?

给定十进制’96 .154’,我怎样才能确保它总是向上舍入到96.16(而不是正常舍入到2位小数,这将给出96.15)。

舍入十进制数最多两位小数

我试图将十进制数舍入到小数点后两位,这是完美的。 我这样做: Math.Round(Amount, 2) 所以,如果我的金额为40000.4567 ,那么我得到的是40000.46 ,这正是我想要的。 现在问题是我有四进制数,如40000.0000 ,当我绕它,结果是40000 ,我真正想要的是40000.00 。 所以round总是会忽略尾随的零。 为了解决这个问题,我可以选择将其转换为字符串并使用格式,但我不想这样做,因为效率低下,我相信必须有一些方法可以做得更好。 我也尝试过类似的东西 Decimal.Round(Amount, 2) 现在一种方法是检查数字是否包含小数部分中的任何内容并相应地使用舍入函数,但这是非常糟糕的方法。 我也不能使用截断,因为这与数量有关的明显原因。 怎么回事?

double.Parse显然不适用于某个国家

基本上,我有这个非常简单的计算: int bTaxPrice = int.Parse(prices[wep]); double t = double.Parse(“1.” + taxes); double price = Math.Round(t * bTaxPrice); 我将举例说明计算应该如何工作,比如说t=1.1和bTaxPrice=1279 ,然后是1.1*1279 = 1406.9 ,但是因为我将结果四舍五入,所以价格等于1407。 对于使用我的C#Winforms程序的其他国家/地区(丹麦)的某些用户遇到的问题导致数字不能舍入,而是添加小数点后的最后2位数。 我们上面计算的结果是1407,对于他们来说是140690。 我在互联网上看到它,有些国家有小数点特殊的东西。 对这类问题有什么好处?

Math.round bug – 该怎么办?

Math.Round(8.075, 2, MidpointRounding.AwayFromZero)返回8.07 ,但它应该返回8.08 。 神奇的是, 7.075工作正常,但9.075也返回9.07 ! 该怎么办? 有没有人知道没有这些错误的舍入方法?

甚至在C#中四舍五入

我没有看到Math.Round的结果。 return Math.Round(99.96535789, 2, MidpointRounding.ToEven); // returning 99.97 据我所知,MidpointRounding.ToEven,千分之五的位置应该使输出为99.96。 这不是这种情况吗? 我甚至试过这个,但它也返回99.97: return Math.Round(99.96535789 * 100, MidpointRounding.ToEven)/100; 我错过了什么 谢谢!

C#:如何使用舍入对整数进行简单的数学运算?

我希望方程的结果四舍五入到最接近的整数。 例如 137 * (3/4) = 103 请考虑以下错误代码。 int width1 = 4; int height1 = 3; int width2 = 137; int height2 = width2 * (height1 / width1); 在C#中执行“整数”数学的正确方法是什么? 我真的必须这样做: int height2 = (int)Math.Round( (float)width2 * ((float)height1 / (float)width1) );

为什么Math.Round(2.5)返回2而不是3?

在C#中, Math.Round(2.5)的结果为2。 应该是3,不是吗? 为什么它在C#中代替2?

将整数舍入到最接近的10的倍数

我想弄清楚如何围绕价格 – 两种方式。 例如: Round down 43 becomes 40 143 becomes 140 1433 becomes 1430 Round up 43 becomes 50 143 becomes 150 1433 becomes 1440 我有这样的情况,我有一个价格范围说: £143 – £193 其中我想表现为: £140 – £200 因为它看起来更清洁 关于如何实现这一目标的任何想法?