ASP Round函数表现不尽如人意

时间:2009-12-22 18:33:25

标签: .net asp.net asp-classic vbscript rounding

我将小数值四舍五入为整数值 例如:

我有5个数字,其%和最终应该是100%,但我得到101%我的值是

11.11111, 80.55555, 5.55555, 2.77777 

并且将它们四舍五入我得到了

11, 81, 6, 3 => 101

在上面例如5.555556舍入到6(正确的值),但是当我舍入并添加数字时,我的总数百分比高于100。 如何强制或更改圆函数以获得所需的值? 我正在使用

round(100 * (x1/sum) )

我在网页上的输出如下:(我想显示%舍入为int)

field value %
x      8    11
y      58   81

这不可能吗?

注意:我正在使用asp圆功能 - 更新

7 个答案:

答案 0 :(得分:2)

实际上,在我看来5.556应该是6到6。也许你的学校以不同的方式教数学?

答案 1 :(得分:2)

也许你错了,但是5.55556实际上应该向上舍入到6(任何.5及以上的任何一个,以及.5以下的任何一个回合)。如果你想要更好的控制,那么我会调查地板和ciel功能。地板总是四舍五入,ciel总是四舍五入。

答案 2 :(得分:1)

为什么你认为5.55556应该是5?舍入算法向上或向下舍入,具体取决于哪个整数最接近。显然6比5更接近5.55556(它比5.5大),所以6是预期的正确答案。

查看地板和ceil函数,了解总是四舍五入的替代实现,并分别进行四舍五入。

-Oisin

答案 3 :(得分:1)

您应该添加所有值,然后进行舍入。

从本质上讲,四舍五入会让你多一点或多一点。因此,如果你添加的值更多,那么你将获得超过100个。

答案 4 :(得分:1)

VB(和VBScript / ASP 3)使用银行家的舍入(或“舍入到最近的偶数”),所以:

1.5 rounds to 2
2.5 rounds to 2
3.5 rounds to 3
4.5 rounds to 4
... etc.

我建议按照Jim Schubert的建议,编写自己的舍入函数进行正确的舍入。

此页面提供了有关所有vb-esque语言的舍入的一些很好的信息:

http://support.microsoft.com/kb/196652

答案 5 :(得分:1)

如果你进行单独的舍入,并且希望总数也是一个确切的数字,那么最后一个单独的数字必须始终是最终结果减去所有先前的舍入数字。

这是ASP的情况,也是Excel f.i中的情况。 AFAIK这是实现这一目标的唯一途径。

答案 6 :(得分:0)

尝试做:

round(100m * (x1/sum) )

应该强制将两个因子都视为小数而不是整数。另外,请确保(x1/sum)在分母中没有更大的数字。