C#:存储百分比,50 还是 0.50?

Posted

技术标签:

【中文标题】C#:存储百分比,50 还是 0.50?【英文标题】:C#: Storing percentages, 50 or 0.50? 【发布时间】:2011-03-19 06:21:51 【问题描述】:

当在变量中保存百分比值时,在将它们保存为整数还是分数之间存在偏好。也就是说,变量应该保持 0 到 100 之间或 0.00 到 1.00 之间的数字吗?无论哪种情况,保存值的变量都是十进制类型。

我与之交互的数据库恰好将它们存储为 0 到 100 的整数。

注意:我使用“整数”一词来表示 0 到 100 范围内的值,尽管这些值可能包含小数部分(例如 25.75)。我不知道如何描述这两个百分比值范围之间的差异

【问题讨论】:

【参考方案1】:

如果您使用浮点字段(float、decimal、double),则 50.0 和 0.50 将具有相同的精度。因此,从这一点开始,我会根据相似表中的相似字段所做的决定来做出决定,以给人一种设计统一感。

【讨论】:

嗯...在这种情况下,是的,但是10.00.10 呢?完全不一样! @Mark:你想指出什么?不同的存储形式将规定使用数字的不同方式。 我同意设计统一声明。浮点数 .50 与 50.00 的硬件表示可能会在数学运算中给出(显着?)不同的结果,甚至考虑到数量级的差异。 嗯?我试图指出.5 可以用二进制精确表示,但.1 不能。因此,将数字存储在 0-100 与 0-1 范围内是完全一样的,因为后一种情况可能会导致严重的舍入错误... .1 和 .5 作为浮点值具有相同的精度【参考方案2】:

我倾向于将它们存储为 0 到 1,然后在计算中使用数字时不需要转换。

使用 0 到 100 之间的数字更像是一种查看数字的显示/可读性方式。当您显示百分比时,您可以使用String.Format("0:P,percentage) 这将期望数字介于 0 和 1 之间,但将显示为 0 到 100。

【讨论】:

第二次。使用 0-1 范围内的百分比更容易......如果您想绘制进度条或类似的东西,通常只需将其乘以另一个数字,因此实际上不会有任何重大的舍入错误。 0-1 确实使数学运算更容易,如果您将 0.2 之类的值带入 Excel,您只需将单元格格式设置为百分比,它将显示为 20%【参考方案3】:

如果您对分数进行大量数学运算,您希望将分子和分母分别存储为整数。当使用分数来表示重复或不重复的小数时,可能会出现舍入误差,随着运算次数的增加而增加。

如果你只是存储和呈现数字,那真的没关系。

如果有的话,你打算用这个数字做什么?

【讨论】:

【参考方案4】:

您可以使用双精度数来表示百分比和 0-1。但是,如果您选择将百分比存储为“整数”,我建议您不要使用整数,例如,如果您想表示 12.3%,这会限制您。

【讨论】:

【参考方案5】:

我认为这是微不足道的...两者都是一样的

我的意思是计算/显示信息...

00.50 is cool for calculations

50.00 is cool for displaying

【讨论】:

它们不一样,相差 100 倍!

以上是关于C#:存储百分比,50 还是 0.50?的主要内容,如果未能解决你的问题,请参考以下文章

颤振不同的轴单元

将每个列表值映射到其相应的百分位数

如何使用 c# 读取此代码覆盖率 xml 文件报告

存储统计数据,我需要 DECIMAL、FLOAT 还是 DOUBLE?

Jaccard 得分/距离或重叠百分比

SQLServer ------------ 将数字转换成 百分比的形式