在我们的应用程序中,我们目前决定将所有工程数据存储在 SI 中的数据库中。
我担心我们可能会面临在我们的数据库或 .NET 数字类型中没有足够的精度和准确度的风险。我还担心我们可能会看到浮点数学的产物(尽管这可能是一个问题)。
例如,源数据可能是以 Psi(磅每平方英寸)表示(并从某些 3rd 方服务读入)的压力量。工程师会选择这种度量单位,因为(对于所表达的数量)这将倾向于提供易于消化、人类可读的数字,而无需科学记数法。
当我们“标准化”这个数字时,即当我们为了我们自己的持久性而转换这个数量时,我们可能会将它转换为 Pa(帕斯卡),这将需要将该数字乘以或除以其他一些潜在的大数。
我们经常最终存储非常大或非常小的数字,更糟糕的是 - 我们可能会对这些数字进行进一步的计算。
目前我们使用ORACLE float 和System.Double。
人们对此有何看法?
更新
进一步的研究发现了即将推出的 F# 语言中的 Units of Measure support(在我写的 CTP 中)。
似乎我们将能够让 F# 理解用户输入,例如:
9.81<n/s^2> // an acceleration
我们还可以创建我们自己的派生单位和单位系统。
(来源: msdn.com )
最佳答案
牢记重要数字——测量的准确性。如果 PSI 已知只有整磅,那么转换为 Pa 后有 15 位小数,仍然只有一位有效数字。
精度与精度不同,在工程单位上执行浮点运算需要在操作期间考虑到这一点 - 不要存储比测量精度更高的精度,不要在计算中使用比已知精度更高的精度。
编辑:
您还可以考虑使用 NUMERIC(p,s)
,其中可以明确指定精度(位数)和小数位数(小数点右侧的位数)。
如果这不是一个选项,请考虑保留特定测量的准确性,以便可以报告和/或在计算中使用它。
关于floating-point - 您将使用什么计量单位来存储工程数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/343732/