我经常遇到需要检查获得的差异是否高于机器精度的情况。似乎为此目的,R 有一个方便的变量:.Machine$double.eps. 但是,当我转向 R 源代码以获取有关使用此值的指南时,我看到了多种不同的模式。
以下是stats库中的一些示例:
t.test.R
if(stderr < 10 *.Machine$double.eps * abs(mx))
Run Code Online (Sandbox Code Playgroud)
chisq.test.R
if(abs(sum(p)-1) > sqrt(.Machine$double.eps))
Run Code Online (Sandbox Code Playgroud)
积分
rel.tol < max(50*.Machine$double.eps, 0.5e-28)
Run Code Online (Sandbox Code Playgroud)
影响力
e[abs(e) < 100 * .Machine$double.eps * median(abs(e))] <- 0
Run Code Online (Sandbox Code Playgroud)
原理图
if (any(ev[neg] < - 9 * .Machine$double.eps * ev[1L]))
Run Code Online (Sandbox Code Playgroud)
等等。
10 *,100 *,50 *和sqrt()修饰?.Machine$double.eps用于调整因精度问题而导致的差异的指南?当整数转换为浮点数,并且值不能直接用目标类型表示时,通常选择最接近的值(IEEE-754 要求)。
我想将整数转换为浮点数,并朝零舍入,以防整数值不能直接由浮点类型表示。
例子:
int i = 2147483647;
float nearest = static_cast<float>(i); // 2147483648 (likely)
float towards_zero = convert(i); // 2147483520
Run Code Online (Sandbox Code Playgroud) 干草,我怎样才能将数字四舍五入到最接近的3的倍数?
即
25 would return 27
1 would return 3
0 would return 3
6 would return 6
Run Code Online (Sandbox Code Playgroud)
谢谢
有谁知道如何将数字四舍五入到最接近的5的倍数?我发现了一个算法将它四舍五入到最近的10的倍数,但我找不到这个.
这样做十分.
double number = Math.round((len + 5)/ 10.0) * 10.0;
Run Code Online (Sandbox Code Playgroud) 在我的代码中进行了一系列计算之后,我有了一个BigDecimal有价值的东西0.01954
然后我需要将其乘以BigDecimal,100并希望计算值为1.95
我不希望执行任何向上或向下舍入,我只是希望截断超过两位小数的任何值
我尝试将比例设置为2,但后来我得到一个ArithmeticException说法四舍五入是必要的.如何在不指定舍入的情况下设置比例?
我创造了一款在游戏结束时得分的游戏,但问题是该得分有时是小数点后有很多位数的数字(如87.124563563566).我将如何进行四舍五入或更低的值,以便我可以得到像87.12这样的东西?
谢谢!
我有这两个变量
double num = 540.512
double sum = 1978.8
Run Code Online (Sandbox Code Playgroud)
然后我做了这个表达
double total = Math.round((num/ sum * 100) * 10) / 10;
Run Code Online (Sandbox Code Playgroud)
但我最终以27.0结束.
事实上我有很多其他变量,当我在表达式中使用它们时,我总是在第十个位置得到0.
例子:
我正在使用,{{num | currency:'USD':true}}但它没有显示尾随0.
所以我很幸运能够使用Java 8和新的时间APi,但我没有看到任何舍入函数......
基本上如果时间是......
2014-08-28T10:01.00.000 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.10.123 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.25.123 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.49.123 ----> 2014-08-28T10:02.00.000
2014-08-28T10:01.59.999 ----> 2014-08-28T10:02.00.000
Run Code Online (Sandbox Code Playgroud)
这似乎没问题,但是对吗?
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());
LocalDateTime newTime = now.plusMinutes(1);
System.out.println(newTime.toString());
System.out.println(newTime.format(DateTimeFormatter.ofPattern("yyyy-dd-MM'T'HH:mm:00.000")));
Run Code Online (Sandbox Code Playgroud) 这是个简单的.但无论如何,我认为在这里回答这个问题是一个好主意,以便更快,更容易地参考.
这个操作:
(/ 3 2)
Run Code Online (Sandbox Code Playgroud)
得出这个:
3/2
Run Code Online (Sandbox Code Playgroud)
我需要一个函数来向上舍入,这将产生2和另一个向下舍入,这将产生1.