用整数和需要乘法与使用小数作为一种数据类型 - 你有什么想法?
-
22-08-2019 - |
题
什么是您对此怎么看?我正在整合这是一个制表符分隔文本格式一些新的数据,而所有的小数列都保持单整数;为了确定小数量你需要.01乘以数量。它这样做的东西像百分比,重量和价格信息。例如,商品的价格是在数据文件中表示为3259
,而当我想以显示它,我需要相乘,以获得32.59
的“真实”的金额。
你觉得这是好还是坏主意?我应该让我的数据结构相同,由供应商提供的一个,或者我应该做的数据库列真正小数和使用SSIS或某种ETL过程的自动乘以整数列到他们的十进制数?在这一点上我还没有决定,如果我想使用ORM或存储过程或什么检索数据,所以我试图要放眼长远,并决定要使用的方法。我还可以很容易地仅仅处理这个代码从沿着线一个DTO或类似的东西:
public class Product
{
// ...
private int _price;
public decimal Price
{
get
{
return (this._price * .01);
}
set
{
this._price = (value / .01);
}
}
}
但是,这似乎是一个类的部分额外和不必要的工作。你将如何处理这个,牢记数据是由供应商,你将经常需要从获取更新整数格式提供。
解决方案
“你认为这是一个好还是坏主意?”
坏。
“我应该保持我的数据结构与由供应商提供的一个?”
没有
“我应该使数据库列真正小数?”
是
它是如此简单得多做正确的事情。目前,该数据与任何发射“”到整个数字从小数分离;不与任何实际意义。
在数据是小数。十进制数学工程。使用您的语言和数据库提供的十进制数学。不要发明自己的十进制算法的版本。
其他提示
我个人更喜欢有正确存储在我的数据库中的数据,只是做一个简单的转换每次的更新到来时。
迂腐:它们不保持为整数任一。他们是需要解析的字符串。
Philisophically:你的信息的文件的,你应该写的数据的数据库中。这意味着,在转型需要,使其有意义/有用的任何方式的信息。如果你不这样做改变了前面,那么你就注定要重复整个数据库的所有消费者的变换。
有一些情况下,您不允许转换数据,如能回答这个问题:“什么是文件”。这些方案将需要的数据写成字符串 - 如果解析失败,你不会有该文件的精确表示
在我的脑海里在这种情况下使用十进制超过Int的最重要的方面是可维护性。
存储在表中的数据应,而不需要任意操纵清楚有意义。如果操作所需要的是应该清楚地看出,这是(例如从字段名称)。
我最近处理与在一周中的天作为值存储的数据2-8。你无法想象跌出来这引起了(测试并没有表现出对各种原因的问题,但现场使用并造成政治爆炸)。
如果你曾经运行到这样的情况,我会绝对肯定保证不能被写入或不使用存储过程或视图从表中读取数据。这使您能够确保必要的操作既执行和记录。如果你不具备这两种,一些谁跟着你在未来的可怜的家伙会诅咒你的这个名字。