У Silverlight нет Math.Truncate!... будет ли это эквивалентно работать? - PullRequest
3 голосов
/ 17 марта 2012

Работает ли это как эквивалент 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 ]

8 голосов
/ 17 марта 2012

Ваш truncated не получит правильное значение для отрицательных значений x.

Чтобы использовать Math.Floor для округления до нуля, как это делает Truncate, просто сделайте;

static double Truncate(double d)
{
    return d > 0 ? Math.Floor(d) : -Math.Floor(-d);
}
2 голосов
/ 26 августа 2014

Я понятия не имею, была ли эта функциональность введена в Silverlight 4 или мы просто ее пропустили, но Decimal имеет статический метод для Truncate

public double Truncate(double d)
{
    return Convert.ToDouble(Decimal.Truncate(Convert.ToDecimal(d)));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...