【问题标题】:C#: ensure a decimal has 2 floating point placesC#:确保小数有 2 个浮点位
【发布时间】:2011-12-07 16:19:22
【问题描述】:

我有一个带有十进制类型参数的方法的 webService。此参数必须有 2 个浮点数位置。
我如何确保这一点?

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

   proxy.MyWSmethod(d2);
}

.

MyWSmethod(decimal myDD) { ... }

MyWSmethod 对这两个地方都有验证。所以:
如果“d1”为 1.00 => 一切正常。
如果“d1”为 1 => 验证失败。

主要问题是 d1 是否类似于整数。

我读了一些关于“m”后缀的东西。但是所有的例子都是常数,这不是很有帮助......你也可以看到它不是转换为字符串的目标。

我们来看看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 构建 webservice 客户端时,您将受到 2 个浮点位置的限制。

【问题讨论】:

  • “这个参数必须有2个浮点数”是什么意思?确保这对您有什么帮助?
  • 十进制数有一组指定的数字,你不能强迫它变短或变长……你唯一能做的就是在浮点数之后显示一定数量的数字。

标签: c# decimal


【解决方案1】:

您可以使用 Math.Round 截断到小数点后两位,但无论如何您都必须更新您的验证。

确保验证通过了这些值:

  • 1
  • 1.11
  • 1.1
  • .1
  • .11

【讨论】:

  • 第一个要点:我无权访问验证。如果: xsd - 为它提供基础 - 已定义。我不能改变它。对于没有浮点部分的值(例如 1 ),我遇到的问题最多。
猜你喜欢
  • 2022-11-22
  • 2011-11-09
  • 1970-01-01
  • 2015-11-12
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多