Silverlight没有Math.Truncate! ......这个等同的工作吗?

时间:2012-03-17 17:47:27

标签: silverlight math

在大多数情况下,这是否与Math.Truncate相同:

double x = 1034.45
var truncated = x - Math.Floor(Math.Abs(x));

其中truncated == 0.45

更新...

感谢输入的人!这对我有用:

[TestMethod]
public void ShouldTruncateNumber()
{
    double x = -1034.068;
    double truncated = ((x < 0) ? -1 : 1) * Math.Floor(Math.Abs(x));

    Assert.AreEqual(Math.Truncate(x), truncated, "The expected truncated number is not here");
}

这也是:

[TestMethod]
public void ShouldGetMantissa()
{
    double x = -1034.068;
    double mantissaValue = ((x < 0) ? -1 : 1) *
        (Math.Abs(x) - Math.Floor(Math.Abs(x)));
    mantissaValue = Math.Round(mantissaValue, 2);

    Assert.AreEqual(-0.07, mantissaValue, "The expected mantissa decimal is not here");
}

2 个答案:

答案 0 :(得分:8)

您的truncated无法获得x的负值的正确值。

要使用Math.Floor像Truncate一样向零舍入,只需执行;

static double Truncate(double d)
{
    return d > 0 ? Math.Floor(d) : -Math.Floor(-d);
}

答案 1 :(得分:2)

我不知道Silverlight 4中是否引入了此功能,或者我们是否只是错过了它,但是DecimalTruncate的静态方法

public double Truncate(double d)
{
    return Convert.ToDouble(Decimal.Truncate(Convert.ToDecimal(d)));
}