我必须使用这个:
double trunc(double nummber, int position);
并且我的程序应该给双nummber
减去位置值,像这样:
Console.Write(trunc(3.14159,2)); // 3.14
我怎么写呢?
答案 0 :(得分:0)
这是一种有效的方法。您可以像我一样为double
或decimal
(或两者)做到这一点。我手动计算“乘数”,因为我怀疑少量整数乘法会比使用Math.Pow更快。但是,对于每个人自己:
public static double Truncate(double value, int decimalPlaces)
{
var multiplier = 1;
for (var i = 0; i < decimalPlaces; ++i)
{
multiplier *= 10; //this makes sense if integer multiplication is faster than Math.Pow(), if not...
}
return Math.Truncate(multiplier * value) / multiplier;
}
您可能还想检查decimalPlaces
整数是否为非负数且不大于9(否则它将溢出int
)。如果您希望使用9位以上的数字,则需要将multiplier
设为long
。
答案 1 :(得分:0)
如果您想舍入最多2
个小数点:f2
格式字符串就足够了
Console.Write($"{3.14159:f2}");
如果要截断到2
个小数点:我们必须将(* 100
)截断为整数并缩小(/ 100
) 。最后,如果发生舍入错误(例如f2
),3.13999999
格式
Console.Write($"{Math.Truncate(3.14159 * 100) / 100:f2}");
如果您想实现trunc
,则具有相同的想法(缩放,截断,缩减):
static double trunc(double nummber, int position) {
return Math.Truncate(nummber * Math.Pow(10.0, position)) / Math.Pow(10.0, position);
}