Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Подскажите пожалуйста как округлить дробную часть числа до двух знаков, например вычисляется число: 36.729 а надо его округлить до 36.73. Под конец дня вообще ниче в голову не лезет :) Спасибо С Уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 19:05 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
1. Умнож на 100, отбрось дробную часть, раздели на 100. 2. Переконверть в строку, обреж ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 19:08 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
Во-во. Я долго парился с типом money, у него реальное число знаков после запятой гораздо больше, чем отображается и во всех арифметических операциях используется полное число. Такие смешеые вещи иногда получались, типа 2,50+2,50=5,01 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 19:44 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
Привет. Используй RoundTo(43.4524,-2) и подобные функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 19:58 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
Привет. Используй RoundTo(43.4524,-2) и подобные функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 19:59 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
1. Ну, если отбрасывать дробную часть - это округлением не назовешь... 2. Западэнцы используют статистическое округление (при округлении пятерки направление зависит от четности предыдущего знака, например round(1.5) = round(2.5) = 2) и тип currency, абсолютно бесполезные для нас, использующих округление математическое и 2 знака после запятой. Так что если дело касается бухгалтерии и статичтическое округление не устраивает, лучше всего написать собственную функцию. В меня могут опять по этому поводу плюнуть и бросить кирпич, сказав что бухгалтер может списать ошибки округления в непредвиденные расходы и т.п., но только своя функция будет давать корректный результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 20:05 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
В Math.pas есть столько готовых чудных функций, что ничего писати не надо. Там и банковское округление, и математическое и другое. Буржуи позаботились о любителях математики. Посмотрите функции, схожие с RoundTo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 20:17 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
а я не нашел :(( раундту и сетраундмод знаю, но по поводу пятерки как правило изменить - я тады пас. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2003, 20:24 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
>Seryoga Оператор + знаешь? Y:=Round(X+Чего тебе там надо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2003, 16:08 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
Вот, может это поможет? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 10:33 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
Я тоже столкнулся с этой проблемой. Причем плавающая запятая ведет себя на разных машинах по разному! Пришлось написать свою функцию! Работает на всех машинах и не ошибается уже 2 года! Function SummStr(SUMM:String;Razd,ZPT:Boolean):String;Export; var S,S1,S2:String; I,I1,Flag:Integer; R:Real; label 1,2; begin //Преобр суммы в правильный вид STRING S:=SUMM; S1:=''; //Удаление ведущих и ведомых пробелов For I:=1 To LenGth(S) do begin if S <>' ' Then S1:=S1+S; end; S:=S1; S1:=''; //Убераем разделители " ' " For I:=1 to Length(S) do begin if copy(S,I,1)<>'''' Then S1:=S1+S; end; S:=S1;S1:=''; //Преобразование запятой в точку For I:=1 to LenGth(S) do begin if S=',' Then S:='.'; end; //Убираем посторонние знаки S1:=''; For I:=1 to Length(S) do begin if ((S>='0')and(S<='9'))or(S='.') Then S1:=S1+S; end; S:=S1; //Убираем впередистоящие 0 For I:=1 to Length(S) do begin if S<>'0' Then goto 1; S1:=Copy(S,I+1,Length(S)); end; 1: S:=S1; //---------Добавление нулей-------- //Проверка на наличие запятой (точки) Flag:=0; For I:=1 to Length(S) do begin if S='.' Then begin Flag:=Flag+1; goto 2; end; end; 2: //Если нет запятой if Flag=0 Then S:=S+'.00'; //Если есть запятая If Flag=1 Then begin //В случае если после запятой нет знаков if S[LenGth(S)]='.' Then S:=S+'00'; //В случае если один знак после запятой if S[LenGth(S)-1]='.' Then S:=S+'0'; //В случае если более двух знаков if S[LenGth(S)-2]<>'.' Then begin //Удаляем погрешность вещественного числа if S[I+3]='9' Then begin //Выделяем копейки I1:=StrToInt(Copy(S,I+1,2)); //Добавляем недостающею копейку I1:=I1+1; //Проверяем на 100 //Выделяем рубли S:=Copy(S,1,I-1); S1:=IntToStr(I1); if LenGth(S1)=1 Then S1:='0'+S1; if I1=100 Then begin S1:='00'; //Преобразовываем в Real val(S,R,I1); R:=R+1; S:=FloatToStr(R); end; S:=S+'.'+S1; end;//9 //Отрезаем лишнее While S[LenGth(S)-2]<>'.' do S:=Copy(S,1,LenGth(S)-1); end; end; //Проверка на наличие рублей if S='.' Then S:='0'+S; //Выполняется если указан разделитель S2:=S;S1:=''; if Razd=True Then begin // S:=Copy(S,1,LenGth(S)-3); For I:=0 to Length(S) do begin S1:=S1+S[Length(S)-I]; end; S:=''; For I:=1 To Length(S1) do begin S:=S+S1; if ((I=6)or(I=9)or(I=12)or(I=15)or(I=18)or(I=21))and (Length(S1)>I+1) Then S:=S+''''; end; S1:=''; For I:=1 To Length(S) do begin S1:=S1+S[LenGth(S)-I]; end; S1:=Copy(S1,1,LenGth(S1)-1); S:=S1; end; //Выполняется если другой разделитель копеек вместо точки If ZPT=True Then begin S:=copy(S,1,length(S)-3)+'-'+copy(S,length(S)-1,2); if copy(S,length(S)-1,2)='00' then begin S:=copy(S,1,length(S)-3)+'='; end; end; //S:=M(S); Result:=S; end; SUMM - Сумма (исходная) Razd - разделитель разрядов ZPT - True - выдает 10= False - выдает 10.00 Только отрицательные числа превращает в положительные, я думаю доработать будет не проблема. Очень удобно превращать с любого числа в нормальный вид суммы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 16:12 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
А вот и с отрицательными суммами Function SummStr(SUMM:String;Razd,ZPT:Boolean):String;Export; var S,S1,S2:String; I,I1,Flag:Integer; R:Real; Otr:Boolean; label 1,2; begin //Преобр суммы в правильный вид STRING S:=SUMM; S1:=''; Otr:=False; //Удаление ведущих и ведомых пробелов For I:=1 To LenGth(S) do begin if S <>' ' Then S1:=S1+S; end; S:=S1; S1:=''; //Определаем отрицательность числя if S>'' Then if S='-' Then Otr:=True; //Убераем разделители " ' " For I:=1 to Length(S) do begin if copy(S,I,1)<>'''' Then S1:=S1+S; end; S:=S1;S1:=''; //Преобразование запятой в точку For I:=1 to LenGth(S) do begin if S=',' Then S:='.'; end; //Убираем посторонние знаки S1:=''; For I:=1 to Length(S) do begin if ((S>='0')and(S<='9'))or(S='.') Then S1:=S1+S; end; S:=S1; //Убираем впередистоящие 0 For I:=1 to Length(S) do begin if S<>'0' Then goto 1; S1:=Copy(S,I+1,Length(S)); end; 1: S:=S1; //---------Добавление нулей-------- //Проверка на наличие запятой (точки) Flag:=0; For I:=1 to Length(S) do begin if S='.' Then begin Flag:=Flag+1; goto 2; end; end; 2: //Если нет запятой if Flag=0 Then S:=S+'.00'; //Если есть запятая If Flag=1 Then begin //В случае если после запятой нет знаков if S[LenGth(S)]='.' Then S:=S+'00'; //В случае если один знак после запятой if S[LenGth(S)-1]='.' Then S:=S+'0'; //В случае если более двух знаков if S[LenGth(S)-2]<>'.' Then begin //Удаляем погрешность вещественного числа if S[I+3]='9' Then begin //Выделяем копейки I1:=StrToInt(Copy(S,I+1,2)); //Добавляем недостающею копейку I1:=I1+1; //Проверяем на 100 //Выделяем рубли S:=Copy(S,1,I-1); S1:=IntToStr(I1); if LenGth(S1)=1 Then S1:='0'+S1; if I1=100 Then begin S1:='00'; //Преобразовываем в Real val(S,R,I1); R:=R+1; S:=FloatToStr(R); end; S:=S+'.'+S1; end;//9 //Отрезаем лишнее While S[LenGth(S)-2]<>'.' do S:=Copy(S,1,LenGth(S)-1); end; end; //Проверка на наличие рублей if S='.' Then S:='0'+S; //Выполняется если указан разделитель S2:=S;S1:=''; if Razd=True Then begin // S:=Copy(S,1,LenGth(S)-3); For I:=0 to Length(S) do begin S1:=S1+S[Length(S)-I]; end; S:=''; For I:=1 To Length(S1) do begin S:=S+S1; if ((I=6)or(I=9)or(I=12)or(I=15)or(I=18)or(I=21))and (Length(S1)>I+1) Then S:=S+''''; end; S1:=''; For I:=1 To Length(S) do begin S1:=S1+S[LenGth(S)-I]; end; S1:=Copy(S1,1,LenGth(S1)-1); S:=S1; end; //Выполняется если другой разделитель копеек вместо точки If ZPT=True Then begin S:=copy(S,1,length(S)-3)+'-'+copy(S,length(S)-1,2); if copy(S,length(S)-1,2)='00' then begin S:=copy(S,1,length(S)-3)+'='; end; end; //S:=M(S); if otr Then S:='-'+S; Result:=S; end; Ну а, что касается округления где 5 то насчет этого я думаю: 1) У плавающей запятой при проведении каких-либо математических операциях проблем до такой степени я не встречал 2)Если какой-то чайник вводит сумму с 3-мя знаками после запятой, то округлять на копейку больше я думаю нет необходимости (пускай сначала выучит сколько копеек в рубле) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 16:30 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
@ Shark : ыыыы... а причем тут (+) ??? @ Gold : так какая функция? есть она или нет на самом деле? @ Teo : вот и я о том же. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2003, 17:41 |
|
||
|
Округление дробной части числа до двух зеаков
|
|||
|---|---|---|---|
|
#18+
StrToFloat(FormatFloat(36.729,'0.00')) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2003, 00:28 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=32122452&tid=2118830]: |
0ms |
get settings: |
12ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 398ms |

| 0 / 0 |
