标签: rounding

检查差异是否小于机器精度的正确/标准方法是什么?

我经常遇到需要检查获得的差异是否高于机器精度的情况。似乎为此目的,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)

等等。

问题

  1. 一个如何理解这些不同背后的理由10 *100 *50 *sqrt()修饰?
  2. 是否有关于.Machine$double.eps用于调整因精度问题而导致的差异的指南?

floating-point precision r rounding

36
推荐指数
2
解决办法
1276
查看次数

如何将整数转换为浮点数并四舍五入为零?

当整数转换为浮点数,并且值不能直接用目标类型表示时,通常选择最接近的值(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)

c++ floating-point rounding data-conversion

35
推荐指数
6
解决办法
3364
查看次数

舍入数字最接近3的倍数

干草,我怎样才能将数字四舍五入到最接近的3的倍数?

25 would return 27
1 would return 3
0 would return 3
6 would return 6
Run Code Online (Sandbox Code Playgroud)

谢谢

javascript integer rounding

34
推荐指数
6
解决办法
4万
查看次数

将数字四舍五入为最接近的5的倍数

有谁知道如何将数字四舍五入到最接近的5的倍数?我发现了一个算法将它四舍五入到最近的10的倍数,但我找不到这个.

这样做十分.

double number = Math.round((len + 5)/ 10.0) * 10.0;
Run Code Online (Sandbox Code Playgroud)

java rounding

34
推荐指数
6
解决办法
7万
查看次数

如何截断BigDecimal而不进行舍入

在我的代码中进行了一系列计算之后,我有了一个BigDecimal有价值的东西0.01954

然后我需要将其乘以BigDecimal,100并希望计算值为1.95

我不希望执行任何向上或向下舍入,我只是希望截断超过两位小数的任何值

我尝试将比例设置为2,但后来我得到一个ArithmeticException说法四舍五入是必要的.如何在不指定舍入的情况下设置比例?

java rounding bigdecimal arithmeticexception

34
推荐指数
3
解决办法
4万
查看次数

在C#中向上或向下舍入值

我创造了一款在游戏结束时得分的游戏,但问题是该得分有时是小数点后有很多位数的数字(如87.124563563566).我将如何进行四舍五入或更低的值,以便我可以得到像87.12这样的东西?

谢谢!

c# numbers rounding

33
推荐指数
6
解决办法
6万
查看次数

使用Math.round舍入到一个小数位?

我有这两个变量

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.

java decimal rounding

33
推荐指数
8
解决办法
11万
查看次数

在角度2中,如何将数字显示为两位十进制舍入货币?

例子:

  • 1.99 - > 1.99美元
  • 1.9 - > 1.90美元
  • 1 - > 1.00美元
  • 1.005 - > 1.01美元
  • 1.004 - > 1.00美元

我正在使用,{{num | currency:'USD':true}}但它没有显示尾随0.

currency rounding filter angular

33
推荐指数
5
解决办法
6万
查看次数

使用Java 8在几分钟内完成

所以我很幸运能够使用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)

datetime rounding ceil java-8 java-time

32
推荐指数
2
解决办法
2万
查看次数

在Clojure中围绕数字的最佳方法是什么?

这是个简单的.但无论如何,我认为在这里回答这个问题是一个好主意,以便更快,更容易地参考.

这个操作:

(/ 3 2)
Run Code Online (Sandbox Code Playgroud)

得出这个:

3/2
Run Code Online (Sandbox Code Playgroud)

我需要一个函数来向上舍入,这将产生2和另一个向下舍入,这将产生1.

clojure rounding

32
推荐指数
3
解决办法
2万
查看次数