标签: rounding

编写 5 星级评级系统的最佳方法?

基本上我正在编写一个允许用户发布体育赛事的网站。然后会员可以对每个活动进行评分。评级系统为 10 分制:0.5、1.0、1.5、2.0、2.5、3.0、3.5、4.0、4.5、5.0。

有四类:

组织、物有所值、设施、乐趣因素

我使用字段将值存储在 mysql 数据库中float

我使用了以下虚拟数据来测试系统。

  • 组织 = 2,v4m = 4.5,fac = 4,乐趣 = 2.5;
  • 组织 = 3.5,v4m = 4,fac = 4.5,乐趣 = 1.5;
  • 组织 = 1,v4m = 5,fac = 4.5,乐趣 = 2.5;

当显示基于上述的事件评级时,我希望每个类别都四舍五入到上述 5 星级评级系统。

到目前为止,我有以下代码,除了舍入之外,它似乎工作正常。

例如:目前2.1666666666667我想将三个组织评级的平均值四舍五入为2.0。如果平均值是,4.6666666666667我希望它四舍五入到4.5

但我该怎么做呢?

到目前为止我的代码如下:

// Count how many ratings this event has
        if($ratingCount = $event->getEventRatingCount($event_id)){

            // Get ratings for this event
            $eventRating = $event->getEventRatings($event_id);

            $organisation = 0;
            $valueForMoney = 0;
            $facilities …
Run Code Online (Sandbox Code Playgroud)

php decimal rounding

0
推荐指数
1
解决办法
1850
查看次数

如何舍入 R 列表中的值 - 仅舍入数字值?

我的问题似乎很简单但我不明白出了什么问题。

我有以下数据:

myData <- structure(list(structure(0.964671123392506, .Names = "W"), 0.022361343060769242, 
                         structure(0.964695704055953, .Names = "W"), 0.022162269470046909, 
                         structure(0.958418109351607, .Names = "W"), 0.045107813263059401, 
                         structure(0.874545371360235, .Names = "W"), 1.59340622525965e-06), .Dim = c(2L, 
                                                                                                     4L), .Dimnames = list(c("Measure", "c-value"), c("col1", 
                                                                                                                                                      "col2", "col3", "col4")))
Run Code Online (Sandbox Code Playgroud)

分别是:

typeof(myData)
[1] "list"
Run Code Online (Sandbox Code Playgroud)

我希望将所有元素四舍五入到选定的位数。我不能简单地应用舍入函数,所以我编写了以下函数:

roundMe <- function(x, numbers=3) 
  {
  if ( is.numeric(x) ) {x <- as.character(sprintf("%3.2f", round(x, digits=numbers)))}
  #there's problem:
  x
}
Run Code Online (Sandbox Code Playgroud)

并尝试应用它

apply(myData,1:2,roundMe)
Run Code Online (Sandbox Code Playgroud)

这使:

        col1   col2   col3   col4  
Measure List,1 List,1 List,1 List,1
c-value List,1 List,1 List,1 List,1
Run Code Online (Sandbox Code Playgroud)

当我将 roundMe …

r rounding

0
推荐指数
1
解决办法
7551
查看次数

快速循环功能。无法调用非函数类型“Int”的值

我遇到了一个奇怪的问题..我尝试在我的一个视图控制器中调用 round 函数。

let roundedValue = round( letterAmount[ index ] * 10 ) / 10
Run Code Online (Sandbox Code Playgroud)

它工作得很好..当我尝试在另一个视图控制器中使用同一行的 round 时。

let roundedValue = round( letterAmount[ index ] * 10 ) / 10
Run Code Online (Sandbox Code Playgroud)

我收到错误无法调用非函数类型“Int”的值。

我也尝试做一条简单的线

round( 1.2 )
Run Code Online (Sandbox Code Playgroud)

同样的事情发生了,在一个视图控制器中我没有收到错误,但在另一个视图控制器中我收到错误 Cannot call value of non-function type 'Int'.. 为什么会发生这种情况?

int rounding swift

0
推荐指数
1
解决办法
2345
查看次数

将数字舍入为一组给定值

这里谈论Python 3。

我希望将数字四舍五入为一组给定的可能变化的值

假设value_set = [x, y, z]为了这个例子,x, y, z = 1, 3.12, 4我正在寻找一个函数,它将给定的浮点四舍五入到最接近的数字

custom_round(0) --> 1

custom_round(2.7) --> 3.12

请注意,它应该足够通用,value_set长度也会有所不同

rounding python-3.x

0
推荐指数
1
解决办法
2397
查看次数

Python内置函数源码-round()

问题

我想访问内置函数的源代码round(),以允许我创建一个非常相似的函数。我如何访问该源代码以及编辑/使用该源代码的容易程度如何?


round()我对此感兴趣的原因是,即使位数为负,内置函数也会将整数转换为浮点数。例如:

round(1234.5678,-2)
Run Code Online (Sandbox Code Playgroud)

退货

1200.0 
Run Code Online (Sandbox Code Playgroud)

我想创建一个返回整数的函数。我确信还有其他方法可以实现相同的结果,但我想看看内置函数如何实现此任务,因为我希望这是相当有效的。

python rounding

0
推荐指数
1
解决办法
5266
查看次数

c# vs python float舍入差异

我正在用 python 开发一个应用程序,其中一些部分是用 c# 编写的(为了加速),我很困惑为什么在使用“round”函数和字符串浮点格式化函数时,c# 浮点舍入的行为与 python 的行为“相反”,这是一个例子:

Python (2.7)

>>> round(6.25, 1)
6.3
>>> "%.1f"%6.25
6.2
Run Code Online (Sandbox Code Playgroud)

C#

>>> Math.Round(6.25,1)
6.2
>>> (6.25).ToString("F1")
6.3
Run Code Online (Sandbox Code Playgroud)

有谁理解为什么 Python 与 C# 之间的行为似乎“相反”?有没有办法将“双精度”浮点值舍入为 N 位十进制数字,以在 Python 和 C# 之间产生保证相同的字符串输出?

c# python floating-point rounding

0
推荐指数
1
解决办法
1383
查看次数

处理 SAS 中的舍入错误

我正在开发一个大型数据应用程序,并且遇到了似乎无法修复的舍入错误。代码基本上是这样的:

proc sql;
select round(amount,.01) - round(amount * (percentage/100),.01) as amount
from data;
quit;
Run Code Online (Sandbox Code Playgroud)

我尝试了各种修复方法,但所有似乎都会导致另一个方向出现其他舍入错误。对于产生错误量 = 56.45 和百分比 = 10 的行。我得到的结果等于 50.80,并希望结果等于 50.81。我无法接受舍入误差,因为有一个单独的过程可以反转没有舍入误差的交易,最终反转加上产生舍入误差的部分必须加起来为零。

我尝试过的代码:

select round((((100-percentage)/100)*amount), .01)
select round(amount,.01) - round(amount * (percentage/100),.001) as amount
Run Code Online (Sandbox Code Playgroud)

其中第二个解决了问题,但在另一个方向上产生了三个舍入误差。

非常感谢任何帮助。

谢谢。

sql database sas rounding proc

0
推荐指数
1
解决办法
909
查看次数

如何舍入远离零

我是 python 的新手,据我所知,python 没有某种“数学”舍入。或者说有吗?我有一个温度数组,例如:

temp = [-20.5, -21.5, -22.5, -23.5, 10.5, 11.5, 12.5, 13.5]
Run Code Online (Sandbox Code Playgroud)

我无法以数学方式将值四舍五入的方法改进为:

>> [-21, -21, -22, -22, -22, -24, -23, -23, -23, -23, -24, ...]
Run Code Online (Sandbox Code Playgroud)

因此,-20.5 四舍五入到 -21、-21.5 四舍五入到 -22、-23.5 四舍五入到 -24、10.5 四舍五入到 11、11.5 四舍五入到 12、12.5 四舍五入到 13。在我的情况下,数学准确性很重要。

对我来说最好的选择是使用像 numpy.around() 这样的函数,因为它对所有值进行四舍五入,而不是一一舍入(我想,它更快)。有这样的功能,或者有这样的方式吗?

我得到的结果:

np.around(temp, decimals=0)
>>[-20. -22. -22. -24.  10.  12.  12.  14.]
np.rint(temp)
>>[-20. -22. -22. -24.  10.  12.  12.  14.]
np.round(temp)
>>[-20. -22. -22. -24.  10.  12.  12.  14.]
np.trunc(temp)
>>[-20. -21. -22. -23.  10.  11. …
Run Code Online (Sandbox Code Playgroud)

python math numpy rounding

0
推荐指数
1
解决办法
2258
查看次数

以下代码中是否可以避免这些舍入错误?

我正在尝试在 Matlab 中编写一个程序来使用 LU 分解求解线性方程组,该分解采用高斯消元法,因此需要大量算术步骤。

答案接近正确的解决方案,但与 Python 等其他语言相比,舍入误差相当高。

例如,其中一个解恰好是 3,但我得到 2.9877。

我知道内置函数应该用于此类琐碎的事情,因为 Matlab 是一种高计算语言,但如果我仍然想用循环等来完成它,我总是会遇到舍入错误,或者有没有办法在做时减少这些错误数值计算?

我附上了代码,但它很大,不值得阅读。为了完整起见,我仍然附上了它。人们可以注意到许多算术运算的使用会引入大量舍入误差。

这些舍入误差是 Matlab 固有的且不可避免的吗?

clc
clear
%No of equations is n
n=3;
%WRITING THE Coefficients
A(1,1)=3;
A(1,2)=-0.1;
A(1,3)=-0.2;
B(1)=7.85;

A(2,1)=0.1;
A(2,2)=7;
A(2,3)=-0.3;
B(2)=-19.3;

A(3,1)=0.3;
A(3,2)=-0.2;
A(3,3)=10;
B(3)=71.4;
%Forward Elimination
for i=1:n-1
  for j=i+1:n
    fact=A(j,i)/A(i,i);
    A(j,i)=fact;
    
    A(j,j:n)=A(j,j:n)-fact*A(i,j:n);
    B(j)=B(j)-fact*B(i);
  end
end
disp(A)
% Calculating d matrix
sum=0;
D(1)=B(1);
for i=2:n
  for j=1:i-1
    sum=sum+A(i,j)*B(j);
    D(i)=B(i)-sum;
  end
end
disp("D =")
disp(transpose(D))

%Back Substitution
X(n)=D(n)/A(n,n);
for z=n-1:-1:1
  sum=0;
  for w=z+1:n
    sum=sum+A(z,w)*X(w); …
Run Code Online (Sandbox Code Playgroud)

matlab matrix linear-algebra rounding numerical-methods

0
推荐指数
1
解决办法
89
查看次数

小数舍入结果的差异

使用Java:

$ jshell
|  Welcome to JShell -- Version 17.0.3
|  For an introduction type: /help intro
Run Code Online (Sandbox Code Playgroud)

使用“半偶数”舍入方法,3084.5 舍入为 3084:

jshell> new java.math.BigDecimal("3084.5").setScale(0, java.math.RoundingMode.HALF_EVEN)
$13 ==> 3084
Run Code Online (Sandbox Code Playgroud)

但 3084.51 四舍五入为 3085:

jshell> new java.math.BigDecimal("3084.51").setScale(0, java.math.RoundingMode.HALF_EVEN)
$13 ==> 3085
Run Code Online (Sandbox Code Playgroud)

为什么数字会1影响舍入?它超出了5舍入操作期间应考虑的最后一位有效数字 ( ),对吧?

java rounding bigdecimal

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