考虑以下两种情况:
fmt.Println(912 * 0.01)
fmt.Println(float64(912) * 0.01)
(转到Playground链接)
第二个打印9.120000000000001,实际上很好
但是,为什么第一行打印9.12,但末尾没有…01?Go是否会将两个未类型化的常数相乘,并在编译时将它们简单地替换为9.12文字?
根据规格:
常量表达式总是精确地求值;中间值和常量本身可能需要比该语言中任何预声明类型支持的精度大得多的精度。
以来
912 * 0.01
是一个常数表达式,它的值精确计算。因此,写作fmt.Println(912*0.01)
与写作具有相同的作用fmt.Println(9.12)
。当你脚912
到float64
,浮点乘法的另一个操作数隐含寄托float64
了。因此,表达式的float64(912) * 0.01
行为类似于float64(912) * float64(0.01)
。0.01在a中不能精确表示float64
,因此精度float64(912 * 0.01)
会在与fmt.Println()
您的第一个示例的参数所产生的表达式不同的地方丢失,该表达式解释了不同的结果。
为什么它不打印“processTextPosition:ContainsKey”?
和有什么区别? 我对。class文件进行了反编译,发现在第一种情况下,JVM将使用multianwearray来创建数组,而在第二种情况下,它将使用AneWarRay。 我认为在第一种情况下,JVM将创建一个连续的空间。我说的对吗?
错误: Test.ts(18,30):错误TS2345:类型为“{color1:String;}”的参数不能分配给类型为“squareConfig”的参数。对象文本只能指定已知属性,并且“SquareConfig”类型中不存在“Color1”。
问题内容: 我创建了两个列表和,但是每个列表都有不同的创建方法: 但是输出使我感到惊讶: 使用列表推导创建的列表在内存中更大,但是在Python中这两个列表相同。 这是为什么?这是CPython内部的东西,还是其他解释? 问题答案: 在编写时,Python知道它将需要一个正好包含10个对象的列表,因此它会精确地分配该对象。 当您使用列表推导时,Python不知道它需要多少。因此,随着元素的添加,列
我在N主页看到两个版本ode.js下载如下 我应该使用哪一种,有什么区别?
我正在检查Asert类的api,并为该类找到了两个。(http://junit.sourceforge.net/junit3.8.1/javadoc/junit/framework/Assert.html和http://junit.sourceforge.net/javadoc/org/junit/Assert.html)这两个没有相同的方法有什么原因吗?第一个有一个assertequals(in