我如何四舍五入到最接近的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); 

这几乎是。 请注意使用“数字”和“整数”及其处理方式。

祝你好运!