【问题标题】:Dynamically set number format for Decimal动态设置 Decimal 的数字格式
【发布时间】:2018-06-05 08:46:12
【问题描述】:

我需要根据其他值更改Decimal 数字的格式。

我的客户是一个表演场地,想以不同的格式对不同的消耗品收取使用费,例如:

更换灯泡 - 仅限整数 = 数量只能等于 1 或 2 或 3...
工时 - 按季度计费 - 数量可能等于 1.25(2 个小数点)
用电量 - 小数点后 4 位 = 数量可能等于 23.1234

所以我希望能够根据收费项目的类型更改为数量的数字格式:

如果项目 = 光球,格式 = 0
如果项目 = 工时,格式 = 0.##
如果项目 = 电力,格式 = G4

由于数字格式的动态特性,使用 DisplayFormat(DataFormatString = "{0:d}")] 之类的内容是不合适的(除非您知道在运行时更改它的方法)。

但是我需要系统以选择的任何格式“思考”,所以如果格式为“0.00”,那么我需要所有显示格式、验证、数字舍入等为“0.00”。

我可以将每个项目的相关格式存储在数据库中。

非常感谢。

【问题讨论】:

  • "G4" 是一个字符串,因此永远不能以任何格式保存为十进制。因此,您必须使用字符串作为属性的类型。之后,您可以在用户完成输入后尝试自动检测格式(可能使用正则表达式),然后根据需要使用检测来运行验证代码的自定义部分。如果无法自动区分不同的格式,您必须让用户从支持格式的预定义列表中选择他们输入的格式,以便您可以使用它来选择正确的验证等。

标签: c# asp.net-mvc razor entity-framework-6


【解决方案1】:

您不能添加实际属性(它们被刻录到 IL 中)。一种可能的解决方法是创建您自己的自定义属性,以实现所有可能的验证、显示格式等;并在运行时添加该属性(如this)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2022-07-26
    相关资源
    最近更新 更多