我如何四舍五入到最接近的0.5?
我必须显示评级,为此我需要增量如下:
如果数字是1.0,它应该等于1
如果数字是1.1应该等于1
如果数字是1.2应该等于1
如果数字是1.3应该等于1.5
如果数字是1.4应该等于1.5
如果数字是1.5应该等于1.5
如果数字是1.6应该等于1.5
如果数字是1.7应该等于1.5
如果数字是1.8应该等于2.0
如果数字是1.9应该等于2.0
如果数字是2.0应该等于2.0
如果数字是2.1应该等于2.0
等等…
有一个简单的方法来计算所需的值?
将您的评分乘以2,然后使用Math.Round(rating, MidpointRounding.AwayFromZero)
进行Math.Round(rating, MidpointRounding.AwayFromZero)
,然后将该值除以2。
乘以2,然后除以2
如果你要最近的季度,乘以4,除以4等
以下是我写的几个方法,总是会舍入或取消任何值。
public static Double RoundUpToNearest(Double passednumber, Double roundto) { // 105.5 up to nearest 1 = 106 // 105.5 up to nearest 10 = 110 // 105.5 up to nearest 7 = 112 // 105.5 up to nearest 100 = 200 // 105.5 up to nearest 0.2 = 105.6 // 105.5 up to nearest 0.3 = 105.6 //if no rounto then just pass original number back if (roundto == 0) { return passednumber; } else { return Math.Ceiling(passednumber / roundto) * roundto; } } public static Double RoundDownToNearest(Double passednumber, Double roundto) { // 105.5 down to nearest 1 = 105 // 105.5 down to nearest 10 = 100 // 105.5 down to nearest 7 = 105 // 105.5 down to nearest 100 = 100 // 105.5 down to nearest 0.2 = 105.4 // 105.5 down to nearest 0.3 = 105.3 //if no rounto then just pass original number back if (roundto == 0) { return passednumber; } else { return Math.Floor(passednumber / roundto) * roundto; } }
decimal d = // your number.. decimal t = d - Math.Floor(d); if(t >= 0.3d && t <= 0.7d) { return Math.Floor(d) + 0.5d; } else if(t>0.7d) return Math.Ceil(d); return Math.Floor(d);
听起来你需要四舍五入到最接近的0.5。 我在C#API中看不到任何round
的版本(一个版本需要十进制数字进行四舍五入,这不是一回事)。
假设你只需要处理十分之一的整数,就可以计算round (num * 2) / 2
。 如果你使用任意精确的小数,它会变得更加棘手。 希望你不要。
有几个选项。 如果性能是一个问题,testing他们看一个大循环中哪个工作最快。
double Adjust(double input) { double whole = Math.Truncate(input); double remainder = input - whole; if (remainder < 0.3) { remainder = 0; } else if (remainder < 0.8) { remainder = 0.5; } else { remainder = 1; } return whole + remainder; }
正确的做法是:
public static Decimal GetPrice(Decimal price) { var DecPrice = price / 50; var roundedPrice = Math.Round(DecPrice, MidpointRounding.AwayFromZero); var finalPrice = roundedPrice * 50; return finalPrice; }
Public Function Round(ByVal text As TextBox) As Integer Dim r As String = Nothing If text.TextLength > 3 Then Dim Last3 As String = (text.Text.Substring(text.Text.Length - 3)) If Last3.Substring(0, 1) = "." Then Dim dimcalvalue As String = Last3.Substring(Last3.Length - 2) If Val(dimcalvalue) >= 50 Then text.Text = Val(text.Text) - Val(Last3) text.Text = Val(text.Text) + 1 ElseIf Val(dimcalvalue) < 50 Then text.Text = Val(text.Text) - Val(Last3) End If End If End If Return r End Function
我也遇到了这个问题。 我的代码主要是ActionScript 3.0的基础编码的Adobe Flash平台,但在语言中有相似之处:
我提出的解决scheme如下:
//Code for Rounding to the nearest 0.05 var r:Number = Math.random() * 10; // NUMBER - Input Your Number here var n:int = r * 10; // INTEGER - Shift Decimal 2 places to right var f:int = Math.round(r * 10 - n) * 5;// INTEGER - Test 1 or 0 then convert to 5 var d:Number = (n + (f / 10)) / 10; // NUMBER - Re-assemble the number trace("ORG No: " + r); trace("NEW No: " + d);
这几乎是。 请注意使用“数字”和“整数”及其处理方式。
祝你好运!