C #: убедитесь, что десятичное число имеет 2 места с плавающей запятой - PullRequest
0 голосов
/ 04 ноября 2011

У меня есть веб-сервис с методом, который принимает параметр типа decimal. Этот параметр должен иметь 2 позиции с плавающей запятой.
Как я могу это гарантировать?

public void callMyWS(decimal d1) {
   ...
   decimal d2 = Ensure2FloatingPointPlaces(d1);

   proxy.MyWSmethod(d2);
}

.

MyWSmethod(decimal myDD) { ... }

У MyWSmethod есть проверка для двух мест. Итак:
Если «d1» равен 1,00 => все в порядке.
Если «d1» равно 1 => проверка не пройдена.

Основная проблема в том, что d1 является целочисленным.

Я читал что-то о суффиксе "м". Но все примеры с константными числами, что не очень полезно ... Как вы можете видеть, цель конвертировать в строку не стоит.

Давайте посмотрим на xsd:

<xs:element name="MyWSmethod" type="tns:MyWSmethodType"/>
...
<xs:complexType name="MyWSmethodType">
    <xs:sequence>     
    ...
       <xs:element name="myDecimal" type="myDecimalType"/>
    ...
    </xs:sequence>
</xs:complexType>
...
<xs:simpleType name="myDecimalType">
    <xs:restriction base="xs:decimal">
        <xs:pattern value="[\-]?[0-9]+\.[0-9]{2}"/>
    </xs:restriction>
</xs:simpleType>

Таким образом, при сборке клиента веб-сервиса из xsd у вас будет ограничение на 2 числа с плавающей запятой.

1 Ответ

0 голосов
/ 07 декабря 2011

Вы можете использовать Math.Round для усечения до двух десятичных разрядов, но вам все равно придется обновить свою проверку.

Убедитесь, что проверка проходит следующие значения:

  • 1
  • 1,11
  • 1,1
  • .1
  • .11
...