簡體   English   中英

四舍五入到小數點后兩位 C#

[英]Rounding up to 2 decimal places C#

我感興趣的是如何以某種特定的方式將 double 變量舍入到小數點后兩位。 我到底是什么意思? Math.Round ( number, 2) 工作正常,但是......我有像 17.0449999 這樣的數字......

Math.Round(17.044999, 2) // 17.04

但在那種情況下,我想得到 17.05。 我找到了一種方法來做到這一點,例如:

Math.Round(17.044999, 3) // returns 17.045
Math.Round(17.045, 2) // returns 17.05

我想問的是有沒有其他/更好/更簡單的方法來做到這一點?

[編輯]:

我想我發現這有點奇怪的問題。 從一開始:

我們說具體的數字。 我必須從獎金中計算 5%,在這種情況下,獎金是 340,9。 當我在 Windows 計算器 340,9 * 0.05 中進行計算時,結果是 17,045。 我在 Excel 中進行計算時得到的結果相同。 但是當我在 C# 中做同樣的計算時,我得到類似 17,04499999998 的結果。 這顯然非常接近 17.045,我們可以輕松地將其四舍五入。 但關鍵是我不能將每個結果四舍五入到小數點后 3 位,因為這可能會改變其他結果。

似乎是特殊情況或 C# 計算“太准確”。

您可以使用:

System.Math.Ceiling (n * 100) / 100;

正如這里所解釋的:

Math.Floor() 和 Math.Truncate() 的區別

示例:

System.Math.Ceiling (17.044999 * 100) / 100; // Returns 17.05
public decimal RoundDown(decimal i, double decimalPlaces)
{
   var power = Math.Pow(10, decimalPlaces);
   return Math.Floor(i * power) / power;
}

public decimal RoundUp(decimal i, double decimalPlaces)
{
   var power = Math.Pow(10, decimalPlaces);
   return Math.Ceiling(i * power) / power;
}

RoundDown(17.045, 2);  // 17.04
RoundUp(17.045, 2);    // 17.05

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM