基本上我正在编写一个允许用户发布体育赛事的网站。然后会员可以对每个活动进行评分。评级系统为 10 分制:0.5、1.0、1.5、2.0、2.5、3.0、3.5、4.0、4.5、5.0。
有四类:
组织、物有所值、设施、乐趣因素
我使用字段将值存储在 mysql 数据库中float。
我使用了以下虚拟数据来测试系统。
当显示基于上述的事件评级时,我希望每个类别都四舍五入到上述 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) 我的问题似乎很简单,但我不明白出了什么问题。
我有以下数据:
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 …
我遇到了一个奇怪的问题..我尝试在我的一个视图控制器中调用 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'.. 为什么会发生这种情况?
这里谈论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长度也会有所不同
我想访问内置函数的源代码round(),以允许我创建一个非常相似的函数。我如何访问该源代码以及编辑/使用该源代码的容易程度如何?
round()我对此感兴趣的原因是,即使位数为负,内置函数也会将整数转换为浮点数。例如:
round(1234.5678,-2)
Run Code Online (Sandbox Code Playgroud)
退货
1200.0
Run Code Online (Sandbox Code Playgroud)
我想创建一个返回整数的函数。我确信还有其他方法可以实现相同的结果,但我想看看内置函数如何实现此任务,因为我希望这是相当有效的。
我正在用 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# 之间产生保证相同的字符串输出?
我正在开发一个大型数据应用程序,并且遇到了似乎无法修复的舍入错误。代码基本上是这样的:
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)
其中第二个解决了问题,但在另一个方向上产生了三个舍入误差。
非常感谢任何帮助。
谢谢。
我是 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) 我正在尝试在 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) 使用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舍入操作期间应考虑的最后一位有效数字 ( ),对吧?