Функция ASP Round не работает должным образом - PullRequest
0 голосов
/ 22 декабря 2009

Я округляю свои десятичные значения до целых пример:

У меня есть 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 round - обновлен

Ответы [ 7 ]

2 голосов
/ 22 декабря 2009

Возможно, вы ошиблись, но на самом деле 5.55556 должен округлить до 6 (все, что на .5 и выше округляется вверх, а на любом, что ниже .5, округляется вниз). Если вы хотите лучшего контроля, я бы посмотрел функции пола и колонны. пол всегда округляется, а сиель всегда округляется.

2 голосов
/ 22 декабря 2009

Мне кажется, что 5.556 должен округлить до 6, на самом деле. Может, в вашей школе математику преподавали иначе?

1 голос
/ 23 декабря 2009

Если вы выполняете отдельные округления и хотите, чтобы итоговое значение также было неким точным числом, последний отдельный номер всегда должен быть конечным результатом за вычетом всех предыдущих округленных чисел.

Это относится к ASP, но также и к Excel f.i. AFAIK, это единственный способ добиться этого.

1 голос
/ 22 декабря 2009

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.

Я бы предложил сделать так, как предложил Джим Шуберт, и написать свою собственную функцию округления, чтобы правильно округлить.

Эта страница содержит полезную информацию о округлении на всех языках vb-esque:

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

1 голос
/ 22 декабря 2009

Вы должны добавить все свои значения, а затем выполнить округление.

По своей природе округление дает вам немного больше или меньше. Поэтому, если вы добавите значения, которые немного больше, вы получите более 100.

1 голос
/ 22 декабря 2009

Почему, по вашему мнению, 5.55556 должно округляться до 5? Алгоритмы округления округляются вверх или вниз, в зависимости от того, какое целое число является ближайшим. Ясно, что 6 ближе к 5.55556, чем 5 (это больше, чем 5.5,), поэтому 6 - ожидаемый и правильный ответ.

Посмотрите на функции floor и ceil для альтернативных реализаций всегда округления вниз и всегда округления вверх соответственно.

-Oisin

0 голосов
/ 22 декабря 2009

попробуйте сделать:

round(100m * (x1/sum) )

, что должно заставить оба фактора рассматриваться как десятичные числа вместо целых. Также убедитесь, что у (x1/sum) нет большего числа в знаменателе.

...