【发布时间】:2021-09-26 15:12:43
【问题描述】:
我正在编写一个食谱应用程序,它需要对成分执行加法/减法来制作主购物清单。我想不通的是如何以不会导致 .9999999 .... 而不是 1 的方式表示 1/3 之类的分数(不会转换为干净的小数)。我可以'甚至不能使用盎司作为基本单位,因为三分之一杯是 2.6666666 盎司。
简而言之,这个想法是,如果用户正在制作使用糖的食谱,他们可能会有一个要求一杯,另一个要求半杯,另一个要求三分之一杯。然后这会告诉他们下一次购物时需要购买 1 5/6 杯糖。
有没有人解决这个问题,还是我应该禁止所有带有丑陋分数的食谱(这远非理想)?
到目前为止,我想出的最接近的方法是将每种成分存储为三分之一盎司的倍数,但这会使后端逻辑有点复杂!
如果修复将允许我轻松地将值存储在 Postgres 数据库中,则奖励积分!
【问题讨论】:
-
为什么不乘以
60?您将拥有20而不是1 / 3、110而不是1 5 /6等 -
stackoverflow.com/questions/1662538/… 与这个问题无关。这不是那个的副本。
-
您可以轻松地创建一个表示分数的结构,然后随意使用它。在 Postgresql 中,您可以使用 user defined data types。
-
以克(或磅,如果你喜欢的话)存储绝对量,并让用户选择单位。然后在将金额格式化为杯子时,将金额四舍五入到最接近的常规分数(5/6,而不是 11/13 等等。)
-
我想你会发现 C# 本身可以很好地处理这个问题。
(1.0/3)*3==1.0。几乎可以肯定,问题在于您如何将这些数据存储在 Postgres 数据库中。我建议围绕该问题重新提出您的问题,因为这不是 C# 的具体问题。
标签: c# asp.net postgresql asp.net-core .net-core