我有一個Web應用程序將百分比標記應用於產品,但百分比將由用戶指定。例如,用戶可以表示他們想要標記產品5%,9%,23%等。我的問題是,產品價格也會發生變化,因此最終會給出醜陋的價值(1462.72美元)將十進制值舍入到最接近的5或0的數量
因此,我的用戶希望我們可以將值舍入到最接近的5 \ 0值。所以如果我標出的產品價格是1462.72美元,那麼它將達到1465美元。另一方面1798.02美元的價格將上漲至1800美元。
使用VB \ C#,我該如何繞過這些值?
謝謝!
我有一個Web應用程序將百分比標記應用於產品,但百分比將由用戶指定。例如,用戶可以表示他們想要標記產品5%,9%,23%等。我的問題是,產品價格也會發生變化,因此最終會給出醜陋的價值(1462.72美元)將十進制值舍入到最接近的5或0的數量
因此,我的用戶希望我們可以將值舍入到最接近的5 \ 0值。所以如果我標出的產品價格是1462.72美元,那麼它將達到1465美元。另一方面1798.02美元的價格將上漲至1800美元。
使用VB \ C#,我該如何繞過這些值?
謝謝!
下一個倍數舍入到任意模量,您可以創建類似的功能:
public decimal Round(decimal source, decimal modulus)
{
return (Math.Round(source/modulus) * modulus);
}
並以這種方式使用它:
decimal rounded = Round(1798.02m , 5.0m); // yields 1800.0
decimal rounded = Round(1462.72m , 5.0m); // yields 1465.0
decimal rounded = Round(2481.23m , 5.0m); // yields 2480.0
注意Math.Round
默認回合最接近中點值甚至數字(例如1.5和2.5將兩個「輪」 2。在你的情況下,效果是一個0和5號(即2.5,7.5)之間精確地吃任何數字將被舍入到最接近的10:
decimal rounded = Round(1697.50m , 5.0m); // yields 1700.0
decimal rounded = Round(1702.50m , 5.0m); // yields 1700.0
如果你想總是在中點01圍捕只需指定,在Round
:
return (Math.Round(source/modulus, MidpointRounding.AwayFromZero) * modulus);
您可以使用modulus operator來計算所需的調整。
decimal price = 1798.02;
decimal adjustment = price % 5.0;
if(adjustment != 0) //so we don't round up already round numbers
{
price = (price - adjustment) + 5;
}
這將使其達到的5
正是我需要的,謝謝 – ewitkows