小编Sil*_*ust的帖子

为什么SQL中的199.96 - 0 = 200?

我有一些客户收到奇怪的账单.我能够找出核心问题:

SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 200 what the?
SELECT 199.96 - (0.0 * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96
SELECT 199.96 - (0.0 * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * 199.96)) -- 199.96

SELECT 199.96 - (CAST(0.0 AS DECIMAL(19, 4)) * FLOOR(CAST(1.0 AS DECIMAL(19, 4)) * CAST(199.96 AS DECIMAL(19, 4)))) -- 199.96
SELECT 199.96 - (CAST(0.0 AS DECIMAL(19, 4)) * FLOOR(1.0 * CAST(199.96 AS DECIMAL(19, 4))))                         -- 199.96 …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server precision sqldatatypes sql-server-2016

83
推荐指数
2
解决办法
5941
查看次数

为什么Some(1).getOrElse(Some(1))不是Option [Int]类型?

我目前正在使用Scala开发一个项目,似乎我并不完全理解Scala的类型系统: - /

我有以下情况:

def reviews(id: Int) = Action { implicit request =>
  Ok(html.products.reviews(
    reviewlist,
    reviewlist
      .find(review => review.id == id)
      .getOrElse(reviewlist.headOption)
  ))
}
Run Code Online (Sandbox Code Playgroud)

不幸的是编译器说,他无法将Product转换为Option [Review],所以我更改了代码

reviewlist
  .find(review => review.id == id)
  .getOrElse(reviewlist.headOption)
Run Code Online (Sandbox Code Playgroud)

id match {
  case 0 => reviewlist.headOption
  case id => reviewlist.find(review => review.id == id)
}
Run Code Online (Sandbox Code Playgroud)

这似乎现在有效,即使它与它不完全相同,例如,如果提交的评论ID无效,则不再显示第一条记录.然后会假装,还没有评论.

然后我将问题分解为一个简单的样本:

val a: Option[Int] = Some(1).getOrElse(Some(1))
Run Code Online (Sandbox Code Playgroud)

那么,有谁有想法,为什么右侧的表达式不是Option [Int]类型?两者,Some(1)和None都直接从Option继承而且这个表达式实际上是Some(1)in any或者我错了吗?

有趣的是

val a: Option[Int] = None.getOrElse(None)
Run Code Online (Sandbox Code Playgroud)

工作,但所有其他组合不...

scala

8
推荐指数
2
解决办法
4838
查看次数

Javascript SCORM API提交 - 异步还是同步?

我们目前正面临实施SCORM LMS系统的设计问题.例如,API定义了一个函数LMSCommit,它必须返回'true'或'false'.在该方法中,我们的LMS必须使用包含其参数中的成功或失败消息的回调函数对服务器端服务进行异步调用.我们声称,这根本不可能!然而,我们认为值得向一些专业人士询问我们是否遗漏了一些东西.

SCO(对我们没有影响)调用这样的方法:

var result = LMSCommit('');
Run Code Online (Sandbox Code Playgroud)

我们的LMS(对我们的影响)我们实现这样的事情:

function LMSCommit(useless) {
  callOurServiceFunction(function(Status) {
    // what am I supposed to do here in order to put status into
    // the return value of the outer function???
  }

  // fake true as the callourServiceFunction returned immediatly,
  // no idea how I can use Status to create a return value
  return 'true';
}
Run Code Online (Sandbox Code Playgroud)

我们在这里错过了一些花哨的技巧,还是SCORM标准只是"有争议"?

javascript scorm

5
推荐指数
1
解决办法
1149
查看次数

在javascript中传递包括其上下文的函数

在javascript中有一些我不理解的东西,并将一个示例问题分解为一个基本案例:

    a = function () {
      this.b = 5;
    }

    a.prototype.c = function () {
      alert(this.b);
    }

    var d = new a();
    var e = d.c; // how do I save a ref to the method including the context (object)??

    d.c(); // 5 -> ok
    e();   // undefined -> wtf??
Run Code Online (Sandbox Code Playgroud)

那么为什么在上一个例子中没有上下文的情况下调用函数呢?我如何用上下文调用它?

提前致谢 :-)

javascript

3
推荐指数
1
解决办法
329
查看次数

简单的协方差似乎不适用于c#泛型

在我看来,我对c#中的协方差有一个理解问题.如果我有以下课程:

class a {
}

class b : a {
}

class A<T> where T: a {
}

class B<T> : A<T> {
}

class C : A<b> {
}
Run Code Online (Sandbox Code Playgroud)

现在我做:

A<a> t1 = new B<b>();
A<a> t2 = new C();
Run Code Online (Sandbox Code Playgroud)

这些都不起作用 - 但为什么?微软的这篇文章没有提出,这究竟应该有效吗? http://msdn.microsoft.com/de-de/library/dd799517(v=vs.110).aspx

为什么这个非常简单的例子不起作用?

最好的祝福

c# generics inheritance covariance

3
推荐指数
1
解决办法
108
查看次数

具有功能构造的Scala性能

我目前正在分析用Scala编写的应用程序的性能,我想知道是否可以使用功能构造.一方面,我喜欢功能性编程的优雅和简洁,另一方面,我害怕最终的表现.我发现了一个特别好的例子.

我有一个包含一百万个字符的字符串,我需要对每个数字求和.典型的功能方法是这样的:

val sum = value.map(_.asDigit).sum.toString
Run Code Online (Sandbox Code Playgroud)

然而,这种美观,简洁,功能性的方法需要0.98秒(几乎一秒钟)

var sum = 0;

for(digit <- value)
  sum += digit.asDigit
Run Code Online (Sandbox Code Playgroud)

另一方面,这种必要的方法仅需0.022秒(上述时间的2.​​24%) - 速度提高约50倍......

我确信问题出现了,因为Scala在第一种方法中生成一个新列表,然后再次迭代该列表以创建总和.

依靠功能结构是一个坏主意吗?我的意思是,它们很美 - 我爱它们 - 但它们慢了50倍......

PS我也尝试了别的东西.

val sum = value.foldLeft(0)((sum, value) => sum + value.asDigit)
Run Code Online (Sandbox Code Playgroud)

这种功能性方法虽然简洁,可能比命令式方法更难阅读,但需要0.085秒.它更难阅读,仍然慢4倍......

scala

3
推荐指数
1
解决办法
463
查看次数

Javascript日期构造函数中的日溢出

我目前正在编写某种基于javascript的客户端日历并观察到一些问题.在整个网络中,我可以找到代码示例,人们在Date构造函数中使用日溢出.

// get the first day of the next month
var myDate = new Date(someDate.getFullYear(),someDate.getMonth(),32);
myDate.setDate(1);
Run Code Online (Sandbox Code Playgroud)

这个概念的一般概念是,由于没有32天的月份,构造函数将在下个月内创建一个日期.我甚至看到带有负溢出的codeample:

// get the last day of the previous month
var myDate = new Date(someDate.getFullYear(),someDate.getMonth(),1);
myDate.setDate(-1);
Run Code Online (Sandbox Code Playgroud)

虽然这在许多情况下似乎有用,但我终于发现了一个矛盾:

// this prints "2012-12-30" expected was "2012-12-31"
var myDate = new Date(2013,0,1);
myDate.setDate(-1);
Run Code Online (Sandbox Code Playgroud)

进一步检查最终显示,新日期(2013,0,23)或新日期(2013,0,16)与setDate(-1)相结合的日期均以"2012-12-31"结束.最后我发现使用-1似乎减去了两天(为了得到预期的结果,必须使用setDate(0)).

这是浏览器实现中的一个错误,还是代码样本遍布互联网垃圾?

此外,这个setDate是否具有正负溢出安全性,可供所有主流浏览器使用和统一实现?

javascript

2
推荐指数
1
解决办法
769
查看次数

IDG PNG文件格式块

我目前正在开发基于png文件格式的专有文件格式.到目前为止我完成了,除了它不起作用:-p我实现的deflate解压缩器就像魅力一样,但是png解码器不想很好地执行所以我看了一下原来的png文件.

标准说,在IDAT标题之后,压缩数据立即跟随.因此,当数据是deflate流时,IDAT之后的第一个字符是0x78 == 01111000,这意味着,模式一个块(未压缩)而不是最后一个.

奇怪的是 - 我很难想象PNG编码器不使用动态霍夫曼编码来压缩滤波后的原始图像数据.deflate标准表示在模式1中跳过当前字节的其余部分.

所以接下来的四个字节表示未压缩块的大小及其一个补码.但是0x59FD不是0xECDA的一个补码.即使我搞砸了字节排序:0xFD59也不是0xDAEC的一个补码.

好吧,淘汰赛字节紧随其后.0x97被认为是未压缩但仍过滤的原始png图像数据的第一个字节,因此必须是filtertype.但是0x97 == 10010111不是有效的过滤器类型.事件,如果我搞砸了位打包顺序11101001 == 0xe9仍然没有有效的过滤器类型.

我不再那么关注RFC 1951,因为到目前为止我能够使用我的deflate解压缩程序实现所有类型的文件,所以我怀疑在我这方面有一些误解,我认为PNG标准.

我一遍又一遍地阅读RFC 2083但是我在这里看到的数据与RFC不匹配,对我来说没有意义,必须有一个缺失的部分!

当我查看以下字节时,实际上我无法在任何地方看到有效的过滤器类型字节,这使我认为过滤后的png数据流毕竟是压缩的.

如果将0x78(IDAT之后的第一个字节)从MSB读取到LSB,但RFC 1951则另有说明,这将是有意义的.另一个想法(我更可能)是IDAT字符串和压缩的deflate流的开始之间有一些数据,但RFC 2083则另有说法.布局很清晰

4Bytes大小4Bytes ChunkName(IDAT)[大小]字节(压缩放气流)4Bytes CRC校验和

因此,IDAT之后的第一个字节必须是压缩的deflate流的第一个字节 - 这表示模式1未压缩的数据块.这意味着0x97必须是未压缩但已过滤的png图像数据的第一个字节 - 这意味着0x97是第一行的过滤类型 - 这是无效的...

我只是不明白,我是愚蠢还是什么?

总结:可能性1:在IDAT和压缩的deflate流的有效启动之间还有一些其他的数据,如果说是真的,在RFC2083和我读过的任何有关图像压缩的书中都没有提及.

可能性2:数字0x78被解释为MSB - > LSB,这表示模式3块(动态霍夫曼编码),但这与RF1951相矛盾,RF1951对比特打包非常清楚:(LSB - > MSB)

我已经知道了,丢失的部分必须是非常愚蠢的东西,如果Stack Overflow中只有一个删除按钮,我会觉得急需出售我的灵魂:-p

在此输入图像描述

c png deflate

2
推荐指数
1
解决办法
3405
查看次数