Сломанный компонент среды выполнения Windows - System.Decimal

1

Я получаю ошибку компилятора:

"Метод xxx имеет значение параметра типа" System.Decimal "." System.Decimal "недействительный Windows Runtime должен возвращать только типы времени выполнения Windows".

В любом случае, я могу использовать десятичное число? или я должен просто сохранить значение в виде центов в целых числах?

  • 0
    Кажется, что это (вопрос о десятичном и двойном в финансовых приложениях) решается с помощью ряда других вопросов на ту же тему: stackoverflow.com/search?q=double+versus+decimal . Краткий ответ: «Не делай этого». Вам было бы лучше использовать пользовательский тип данных с фиксированной запятой (это ошеломляет многие вещи, которые они оставили в WinRT ... System.Decimal, безусловно, одна из них)
  • 0
    Ну, у меня всегда было впечатление, что я должен использовать десятичную за деньги. Я думаю, что я немного озадачен тем, почему я не могу использовать десятичную дробь для моего брокерского компонента времени выполнения. Можете ли вы расширить этот пользовательский тип данных с фиксированной запятой?
Показать ещё 4 комментария
Теги:
decimal
enterprise
windows-runtime

2 ответа

0
Лучший ответ

Я нашел, что самым простым решением было сохранить его в виде центов в целых числах.

Я считаю, что это может не работать для всех валют в мире, но меня беспокоят только доллары, поэтому это не проблема в этом конкретном сценарии.

Альтернативой является внедрение шаблона "деньги" - http://martinfowler.com/eaaCatalog/money.html

0

Фактически, я нашел самый простой способ - использовать double для возвращаемых значений и параметров моего компонента WinRT.

Это то, что у меня есть в моей библиотеке классов С#

public static double Round(double value, int digits)
{
    // do stuff
}

Это код С# Windows Runtime Portable Class Library, который я создал как оболочку для вызова из моего кода JavaScript

public static double Round(double val, int digits)
{
    return MyCSharpClassLib.Class.Round(val, digits);
}

И из моего проекта JavaScript это то, что я называю

var round = WindowsRuntimeWrapper.Class1.round(3.1415926549, 3);

И это работает отлично!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню