我读过这些:
他们解释"如何".我想知道为什么这些语言有所不同.考虑到相同的输入,我期待类似的结果.
test.js
#!/usr/bin/env node
var nine = 9.0;
var pointOhOhOne = 0.001;
var result = nine * pointOhOhOne;
console.log(result);
Run Code Online (Sandbox Code Playgroud)
test.java
public class test {
public static void main(String[] argv) {
double nine = 9.0d;
double pointOhOhOne = 0.001d;
double result = nine * pointOhOhOne;
System.out.println(result);
}
}
Run Code Online (Sandbox Code Playgroud)
test.c的
#include "stdio.h"
int main() {
double nine = 9.0;
double pointOhOhOne = 0.001;
double result = nine * pointOhOhOne;
printf("%f", result);
}
Run Code Online (Sandbox Code Playgroud)
test.rb
#!/usr/bin/env ruby
nine = 9.0
pointOhOhOne …Run Code Online (Sandbox Code Playgroud) 为什么new BigDecimal("0.015").compareTo(new BigDecimal(0.015))返回-1?如果我希望这两者相等,是否有另一种方法来比较它们?
为什么以下程序会打印出打印的内容?
class Program
{
static void Main(string[] args)
{
float f1 = 0.09f*100f;
float f2 = 0.09f*99.999999f;
Console.WriteLine(f1 > f2);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是
false
Run Code Online (Sandbox Code Playgroud) 这是我的电脑上发生的事情:
(double)(float)0.6
= 0.60000002384185791
(double)0.6f
= 0.60000002384185791
(double)(6/10f)
= 0.6
(double)(float)(6/10f)
= 0.6
Run Code Online (Sandbox Code Playgroud)
6/10f也是浮子,怎么可以精确到0.6?
在我看来(双)(6/10f)也应该是0.60000002384185791.有人可以帮忙解释一下吗?谢谢!
考虑这两种情况:
fmt.Println(912 * 0.01)
fmt.Println(float64(912) * 0.01)
Run Code Online (Sandbox Code Playgroud)
(去游乐场链接)
第二个打印9.120000000000001,这实际上很好,我明白为什么会这样.
但是,为什么第一行打印9.12,最后没有... 01?Go是否将两个无类型常量相乘,并在编译时简单地用9.12文字替换它们?
编程时,我注意到math.exp(2)和math.e**2的结果之间存在差异.如下所示,计算e ^ 1时不会出现这种差异.
不是一个经验丰富的程序员,我想知道为什么这有所不同?我认为它与四舍五入有关.python文档说math.exp(x)返回e**x,但这看起来并不完全正确.那么math.exp(x)操作怎么会不同math.e**x呢?
>>> math.exp(1)
2.718281828459045
>>> math.e**1
2.718281828459045
>>> math.exp(1)==math.e**1
True
>>> math.exp(2)
7.38905609893065
>>> math.e**2
7.3890560989306495
>>> math.exp(2)==math.e**2
False
>>> math.exp(100)
2.6881171418161356e+43
>>> math.e**100
2.6881171418161212e+43
>>> math.exp(100)==math.e**100
False
Run Code Online (Sandbox Code Playgroud) 在Swift中,有没有办法将浮点数截断为2位小数,这样你就可以用它进行进一步的计算?我见过的所有线程都处理了一个字符串,我无法弄清楚如何使用数学方法.
我尝试使用扩展(在这个论坛上找到),想象我可以在截断后转回浮动,但我最终在我开始的地方,另一个非截断的浮点数.我需要我的返回值是四分之一步(即6.50,6.75,5.25等),而我最终得到的结果就像6.990022 ....
必须有一个简单的方法来做到这一点,但我正在撞墙.提前致谢...
这是问题所在:
func roundToNearestQuarter(#power : Float) -> String {
var errorToLowerQuarterRaw : Float = power % 0.25 // 0.210000038146973
var errorToLowerQuarterString = errorToLowerQuarterStepRaw.string(2) // "0.21"
var errorToLowerQuarter = NSString(string: errorToLowerQuaterStepString).floatValue // 0.209999993443489
// more code
}
roundToNearestQuater(6.71)
Run Code Online (Sandbox Code Playgroud) 由于浮点数学的性质,.4 * .4= 0.16000000000000003朱莉娅.我希望以0.16CPU高效的方式获得数学上正确的答案.我知道round()有效,但这需要事先了解答案占用的小数位数,因此这不是一般解决方案.
您好我知道计算机受数字精度的限制,有些数字无法在二进制系统中准确表示.这就是我问为什么这样比较的原因
(0.1*3) == 0.3
Run Code Online (Sandbox Code Playgroud)
在Java语言中评估为false在C中它评估为true,对我来说Java行为更直观一些.任何提供的答案都不能回答我的问题,为什么他们有不同的行为,因为两者都使用IEEE 754标准.
@update我正在使用ideone来测试条件.
c# ×2
java ×2
bigdecimal ×1
c ×1
decimal ×1
exponent ×1
go ×1
julia ×1
math ×1
objective-c ×1
python ×1
swift ×1
truncation ×1