gpt4 book ai didi

c# - 在 C# 中创建百分比类型

转载 作者:太空狗 更新时间:2023-10-29 18:03:49 29 4
gpt4 key购买 nike

我的应用程序经常处理百分比。这些通常以书面形式而不是十进制形式存储在数据库中(50% 将存储为 50 而不是 0.5)。还要求在整个应用程序中百分比的格式保持一致。

为此,我一直在考虑创建一个名为 percentage 的结构来封装此行为。我猜它的签名看起来像这样:

public struct Percentage
{
public static Percentage FromWrittenValue();
public static Percentage FromDecimalValue();

public decimal WrittenValue { get; set; }
public decimal DecimalValue { get; set; }
}

这样做合理吗?它肯定会封装一些重复多次的逻辑,但这是人们可能理解的简单逻辑。我想我需要让这种类型的行为尽可能像一个普通数字,但是我很小心地创建从十进制到 a 的隐式转换,以防这些进一步混淆人们。

关于如何实现这个类有什么建议吗?或令人信服的理由不这样做。

最佳答案

实际上,我对这里对数据质量的傲慢态度感到有点吃惊。不幸的是,口语化的术语“百分比”可能意味着两种不同的事物之一:概率和方差。 OP 没有具体说明是哪个,但由于通常会计算方差,我猜他可能将百分比表示为概率或分数(例如折扣)。

为此目的编写 Percentage 类的非常好的理由与表示无关,但要确保您防止那些愚蠢的用户做事例如输入 -5 和 250 等无效值。

我实际上更多地考虑的是 Probability 类:一种有效范围严格为 [0,1] 的数字类型。您可以将该规则封装在一个地方,而不是在 37 个地方编写这样的代码:

 public double VeryImportantLibraryMethodNumber37(double consumerProvidedGarbage)
{
if (consumerProvidedGarbage < 0 || consumerProvidedGarbage > 1)
throw new ArgumentOutOfRangeException("Here we go again.");

return someOtherNumber * consumerProvidedGarbage;
}

取而代之的是你有这个很好的实现。不,这不是非常明显的改进,但请记住,您每次使用该值时都在进行该值检查。

 public double VeryImportantLibraryMethodNumber37(Percentage guaranteedCleanData)
{
return someOtherNumber * guaranteedCleanData.Value;
}

关于c# - 在 C# 中创建百分比类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/955051/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com