首页 > 解决方案 > 验证小数精度

问题描述

嗨,我正在尝试计算,我正在使用流利的验证包来确保遵守我的规则

验证正在触发并进入规则,但仍然无法 100% 工作

SageOrderMixB sageOrder = new  SageOrderMixB();
var validator = new MixValidator();
var results = validator.Validate(sageOrder);


public class MixValidator : AbstractValidator<SageOrderMixB>
{
    public MixValidator()
    {            
        RuleFor(x => x.WeightInTons).LessThanOrEqualTo(28).ScalePrecision(2, 2).WithMessage("Weight cannot be greater than 28 and must be a precison of 2"); ;

    }
}

但是,如果我将重量输入为 29,它仍然会绕过并未能通过我的单元测试

在这里你会看到我在添加到我的模型之前陷入困境

 if (results.IsValid == false)
 {
    sberror.Clear();
    foreach (var item in results.Errors)
    {
      sberror.Append(item.ErrorMessage);
    }
 MessageBox.Show("Please correct the following " + sberror.ToString(), "", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
            sageOrdersList.Add(sageOrder);

标签: c#fluentvalidation

解决方案


这里:

.ScalePrecision(2,2)

第一个2是小数位数。第二个2是数字位置的数量。

0.45 <-- this is valid 1.45 <-- this is invalid

例如

.ScalePosition(2,4)

27.24 <-- this is valid

来源:https ://docs.fluentvalidation.net/en/latest/built-in-validators.html#scaleprecision-validator


推荐阅读