我有一个十进制数字,如下所示:
189.182
我想将此向上舍入到2位小数,因此输出如下:
189.19
Math类中是否有内置功能,还是别的什么?我知道天花板功能存在,但这似乎没有做我想要的 - 它会绕到最近的int,所以在这种情况下只是'189'。
答案 0 :(得分:37)
乘以100,呼叫上限,除以100,我认为你要求
public static double RoundUp(double input, int places)
{
double multiplier = Math.Pow(10, Convert.ToDouble(places));
return Math.Ceiling(input * multiplier) / multiplier;
}
用法如下:
RoundUp(189.182, 2);
这可以通过将小数点右移2个位置(因此它位于最后8位的右侧)然后执行上限操作,然后将小数点移回其原始位置。
答案 1 :(得分:13)
您可以使用:
decimal n = 189.182M;
n = System.Math.Ceiling (n * 100) / 100;
可以找到各种舍入函数的解释here。
请注意,这样的公式仍然受到double
类型的有限精度的限制,如果您使用的类型(您的问题是十进制的,但您可能只是意味着一个浮点值)使用小数部分而不是特定的类型)。
例如:
double n = 283.79;
n = System.Math.Ceiling (n * 100);
实际上会给你28380
,而不是你期望的283.79
(a)。
如果您希望全面获得准确的结果,那么您肯定使用decimal
类型。
(a)这是因为283.79
的最准确的IEEE754双精度表示实际上是:
283.790000000000020463630789891
超出.79
的额外(无可否认的微小)分数成分得到了提升,这意味着它会给你一个比你想象的更高的价值。
答案 2 :(得分:3)
怎么样
0.01 * ceil(100 * 189.182)
答案 3 :(得分:1)
var numberToBeRound1 = 4.125;
var numberToBeRound2 = 4.175;
var numberToBeRound3 = 4.631;
var numberToBeRound4 = 4.638;
var numberOfDecimalPlaces = 2;
var multiplier = Math.Pow(10, numberOfDecimalPlaces);
//To Round Up => 4.13
var roundedUpNumber = Math.Ceiling(numberToBeRound1 * multiplier) / multiplier;
//To Round Down => 4.12
var roundedDownNumber = Math.Floor(numberToBeRound1 * multiplier) / multiplier;
//To Round To Even => 4.12
var roundedDownToEvenNumber = Math.Round(numberToBeRound1, numberOfDecimalPlaces, MidpointRounding.ToEven);
//To Round To Even => 4.18
var roundedUpToEvenNumber = Math.Round(numberToBeRound2, numberOfDecimalPlaces, MidpointRounding.ToEven);
//To Round To Away From Zero => 4.63
var roundedDownToAwayFromZero = Math.Round(numberToBeRound3, numberOfDecimalPlaces, MidpointRounding.AwayFromZero);
//To Round To Away From Zero => 4.64
var roundedUpToAwayFromZero2 = Math.Round(numberToBeRound4, numberOfDecimalPlaces, MidpointRounding.AwayFromZero);
答案 4 :(得分:0)
KeyError: ('List A', 'occurred at index ref')
答案 5 :(得分:0)
public static decimal RoundUp(decimal input, int places)
{
decimal multiplier = (decimal)Math.Pow(10, places);
return decimal.Ceiling(input * multiplier) / multiplier;
}