处理使用百分比变化公式的问题:
percent change = 100 * [(new value - old value) / old value]
如果对new value or old value = NULL
,而不是0
对可能不是程序员的人,我该怎么解释?
我的老板想知道为什么TextBox中有一个空字符串而不是一个值,因为我们有旧值,但是没有新值。
NULL
是一个状态,而不是一个值-这意味着您不知道该值。对于SQL,我通常使用聚会类比进行演示。
处理使用百分比变化公式的问题:
percent change = 100 * [(new value - old value) / old value]
如果对new value or old value = NULL
,而不是0
对可能不是程序员的人,我该怎么解释?
我的老板想知道为什么TextBox中有一个空字符串而不是一个值,因为我们有旧值,但是没有新值。
NULL
是一个状态,而不是一个值-这意味着您不知道该值。对于SQL,我通常使用聚会类比进行演示。
Answers:
向老板解释“零”和“空”之间的区别:
“零”是一个值。它是唯一的已知数量零,这在算术和其他数学运算中很有意义。
“ Null”是一个非值。它是未知或未指定的数据值的“占位符”。仅在这种情况下才有意义。不能对null执行数学运算(任何此类运算的结果都是不确定的,因此通常也表示为null)。
例如,如注释中所示:“您的年收入是多少?” 是一个需要数字答案的问题。对于没有工作,没有投资收入的人,“ 0”是一个完全有效的答案。如果用户根本不输入任何值,则他们不一定赚钱。他们只是不想告诉您的软件他们赚了多少钱。这是未知的,未指定;因此,要允许软件继续运行,请在软件中为该数据字段指定“空”占位符。从数据角度来看,这在技术上是有效的;在业务级别上是否有效取决于要执行数学运算(例如税额计算或与确定收益的阈值进行比较)是否需要实际数值(甚至为零)。
在计算机中,实际上,对包含null的变量进行的任何操作都将导致null或错误状态,因为由于该变量的值之一未知,因此表达式的结果也未知。如果我问你“五和我现在想算的数字是多少?”,相当于对null进行数学运算。您不可能给出确切的答案,因为您不知道我在想什么。除以零以外,对零的运算通常是有效的,并且将返回另一个已知的唯一值。
NULL
。
老板说话总是很难...
零是一个数字,因此您可以使用它做事。
空是独角兽。它不存在,因此您根本无法做任何事情。
NVL(somefield,'UNICORN')
;)
只需将等式改写成句子:
“如果从一个未知值开始到150结束,百分比变化是多少?”
和
“如果您从85开始并最终得到一些未知值,百分比变化是多少?”
当然,两者的答案都是“无法计算,因为缺少关键的计算之一”。这就是“空”的本质。
然后,很容易找出具有零的等价句子,并查看它们之间的根本区别:
“如果从0开始到150结束,百分比变化是多少?”
和
“如果从85开始到0结束,百分比变化是多少?”
尽管答案可能没有多大意义(带有零),但至少可以计算得出。如果为null,则无法进行计算。
unknown
它根本就不存在,因为在NULL
百分比的情况下,实际上没有任何数值(百分比)或其他百分比值。
为什么不先问“为什么值等于NULL?”这个问题呢?这可以帮助您解释为什么计算可能无效。
如果您要进行定期更新,并且新值本身不存在(例如,网络错误),则NULL可能表示无法执行计算,并且旧的百分比值已过时。您可能想要显示一个符号,表明您有陈旧的数据,未按预期进行更新。
对于丢失的旧值可能也是如此,但是我很难理解如何丢失旧值(除非这是第一次计算,否则电池会耗尽并且数据会丢失。)但是您可能想要同时显示一个指示这种情况的符号。
无论如何,您都不希望这种情况发生:
我使用硬币翻转。正面为正,背面为假,一只手放在另一只手掩盖的硬币上为NULL。如果您知道硬币是正面的,则很容易回答“这个值有什么反面?”的问题。一只手隐藏硬币很容易显示出,如果您让他们看到当前值,该人可以回答,但由于您不会,他们无法给您答案。就他们所知,您手里甚至没有硬币!
假设我们不涉及特定于语言的内容,例如:
#define NULL 0
区别在于0是一个数字值,而NULL不是。它就像一张方格纸上的一个空单元格。一个单元格可以有一个“ 0”,但也可以是空的。空值仍然是一个值,但是您认为它很特殊。例如,如果单元格现在是字符,则可以将空单元格用作空格,除非指定或创建特殊情况下的字符,否则不再可以使用空单元格。
空值的含义取决于数据的解释方式:
NULL == 0
在C等人中处理空指针时,可以很好地工作。如果您试图通过向非程序员上司展示代码来向他们解释这个想法,那么您做错了。
如果n old value
为null,则方程式的结果应正确为null。这是因为null不是数字,它表示未知值。因此,无法进行计算。
当然,如果old value = 0
不能除以零,您的方程式也会失败。
通常,您使用case语句处理这些事情,该语句将带您进入想要显示的内容的路径。因此,如果您希望结果在无法计算时显示为null(如null或0,那么您可以执行case语句,例如
case when [old value] = 0 then null
else 100 * (([old value] - [new value]) /[old value])
end
关于类比的一些大讨论,以解释空符号与其他值相比的机械方面;但是,我认为,也许可以从管理者的角度来考虑这个问题的症结所在,即在用户界面中充分表达结果,代表适用于其特定问题的有效变更公式的有意义的限制。
在论坛改变百分比的情况下,需要代表两件事:什么时候第一次测量,什么时候没有测量特定方面。
首次测量某些值时(oldValue === NULL),百分比变化不适用;可以/应该明确指出,这是该测量周期的初始测量。
当什么也没测量时(newValue === NULL),实际产生的百分比变化实际上是零值(假设在上一个周期中非零)。在这种情况下,零通常是公式的适当答案。在最近的这个周期中没有测量值,因此也没有测量到的变化。这并不意味着它没有改变,只是在这方面没有任何测量,记录或交流。
最好用指针解释。
var a -> [0] // variable a is initialized and set to hold 0
var b -> [123asgeb0] // variable b is initialized but not set, memory is pointed to, but holds whatever was there last
因此,如果您的语言没有为您跟踪NULL变量,那么您将使用已有的任何内容。这可能导致溢出,堆栈损坏或其他令人讨厌的副作用。
如果该语言确实跟踪NULL变量,则将有一个明确的情况来处理此变量。IE将NULL视为零,引发异常,将其视为nop等。
为了向老板展示,请获取一些用过的纸。
-1的人没有幽默感。FWIW我自己是一名建筑师。
空是空虚。根据传说,Null有17种口味(可能的含义),包括“我不知道”,“他们没有说”和“有人打破了这个”。除了DBA和建筑师之外,没人知道为什么只有程序员会在暗室里皱眉。他们礼貌地对老板微笑,并用难以置信的复杂智慧深深地关心着自己,这是非常重要的,但不是很清楚-因为老板为DBA和架构师提供了重要的表现。支票。即使这样,Null也从不告诉自己的秘密。他们是空无一人的黑洞。一个空值永远不会等于另一个空值,因为每个空虚都没有平等,并且拒绝承认它可能不是所有的空虚。这当然是推测,因为没有任何自我尊重的null可以实际接受它。有时,空值会将大量的实际数据吸收到它们的()中。这被称为错误,但实际上仅仅是程序员遗忘了null的空白。因此,您看到它们有时会繁殖。但是如何或为什么总是很快被遗忘。()有时表示空值或他的表亲为零,但矛盾的是很少有bug。
零是一定数量的东西。零比空更快乐。零只是懒惰,并不会为结果增加太多。
对于无聊的,非常古老的准确答案,Null是SQL的创建者EF Codd的表示,表示“缺少信息和不适用的信息”。
考德还发明了第三范式,该范式作为一种初步的折磨形式,运用于年轻的计算机科学家的脑海中。一旦掌握了它,就完全可以忽略了。引入面向对象设计时,也会发生类似的情况。而且,我们永远不会乐于将其搁置,因此随之而来的是阻抗失配,加剧了摩擦磨损。