Форум: "Начинающим";
Текущий архив: 2016.04.24;
Скачать: [xml.tar.bz2];
ВнизОбрезать после запятой (Float) Найти похожие ветки
← →
Stepan4ik (2014-09-30 08:13) [0]У меня допустим получается ответ в формате Float 99,999999.
Как мне оставить 2 числа после запятой ? Не округлить ! Ибо если округлить, то получится 100, а просто оставить 2 числа после запятой.
← →
MBo © (2014-09-30 08:23) [1]Если речь идёт о том, чтобы сформировать строку, представляющую вещественное число с двумя знаками после запятой, то для этого есть функции Format, FormatFloat и т. п.
s := Format("%8.2f", [x]);
Если вдруг хочется получить вещественное число c точным значением 99.99, то это невозможно ввиду внутреннего представления вещественных чисел
(для некоторых задач может пригодиться тип Currency)
← →
Stepan4ik (2014-09-30 08:26) [2]Я хочу просто выбросить лишние числа.
По сути я могу перевести Float в String, отбросить лишнее, а потом опять перевсти в Float и уже работать с числом, но это мне кажется муторнее.
← →
MBo © (2014-09-30 08:34) [3]См. второй абзац. Числа типа Single или Double со значением 99.99 не существует, точное значение будет немного отличаться, например, 99.989973
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=374
http://habrahabr.ru/post/112953/
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
← →
Stepan4ik (2014-09-30 08:39) [4]Спасибо за помощь, но я лучше наверное сбыдляню )
Ибо от ответа зависит дальнейшая работа программы)
var
A,B:string;
I:Extended;
begin
I:= StrToFloat(Edit1.Text)/115;
A:=Copy(FloatToStr(I),1,Pos(",",FloatToStr(I))-1);
B:=Copy(FloatToStr(I),Pos(",",FloatToStr(I))+1,Length(FloatToStr(I)));
Delete(b,3,100);
Edit1.Text:=A+","+B;
end;
Это вроде бы работает в полне нормально )
← →
MBo © (2014-09-30 08:51) [5]>Ибо от ответа зависит дальнейшая работа программы)
Можешь нарваться на ситуацию вроде
99.99+0.01 <> 100.00
И в Pos использовать жестко запятую вместо DecimalSeparator - тоже аукнется.
← →
Dennis I. Komarov © (2014-09-30 09:46) [6]Каждый должен найти свои грабли сам))) до этого просветление не настанет
← →
Stepan4ik (2014-09-30 09:49) [7]Я запутался блин.
Промежуточный итог: 19,54
Counter-Strike: Global Offensive комиссия (10.0%): 1,95
Комиссия Steam за операцию (5.0%): 0,97
Итого: 22,46
У меня есть только "Итого" 22,46.
Как мне с него получить "Промежуточный итог" ?
Пробовал (Итого / 115 ) * 15. Но все равно выходит не то...
← →
MBo © (2014-09-30 10:07) [8]Итого*100/115
Однако результат из-за последовательных округлообрезаний с потерей данных будет несколько отличаться.
Ещё раз напомню про Currency.
← →
Stepan4ik (2014-09-30 10:49) [9]Сделал так :
var
I:Extended;
a:Currency;
begin
I:=StrToCurr(Edit1.Text);
I:=(I*100)/115;
a:=FloatToCurr(i);
Edit1.Text:=CurrToStr(a);
end;
Выходит 19,5304. Копейка теряется... Жаль.
Или же я не так понял функцию...
← →
Dennis I. Komarov © (2014-09-30 10:55) [10]А тебе говорили, разберись с вещественными числами. А потом уже пиши программы...
← →
icWasya © (2014-10-01 12:27) [11]А насчёт копеек...
Ещё во времена DOS писал одну программу для бухгалтерии.
Вкратце так:
Приходят деньги, их надо раскидать по 10-ти счетам в каком-то процентном соотношении. Типа на первый счёт - 40%, на второй 15%, на третий -3.5% нп четвёртый 15% от второго и т.д.
В итоге печатается таблица, в первой колонке - пришедшие деньги, в последующих - на какой счёт сколько пришло.
А в последней строке -ИТОГО.
А бухгалтеры компьютерам не верят, и всё перепроверяют на калькуляторах.
И требуется, что бы во первых, процент, взятый от поступивших денег, совпадал с вычисленным на компьютере, а во вторых, сумма строки совпадала с первой колонкой. И если с первым более менее понятно, то со вторым...
Скажем взять три с половиной процента от некруглого числа, и придётся округлять. В ту или другую сторону. И в итоге сумма отличается от исходной на 1-2 рубля. Приходилось применять смекалку ;)
← →
junglecat © (2014-10-01 12:46) [12]россиийская бухгалтерия - она вообще для смекалистых людей )
← →
Дмитрий (2014-10-01 14:30) [13]для бухгалтерии есть бухгалтерское округление
оно же банковское
http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1217
← →
MBo © (2014-10-01 15:25) [14]>для бухгалтерии есть бухгалтерское округление
Задачу разброса копеек оно не решает
← →
VICTOR_ (2014-10-01 16:44) [15]
> для бухгалтерии есть бухгалтерское округление
> оно же банковское
> http://www.delphikingdom.com/asp/viewitem.asp?catalogID=1217
Для бухгалтерии есть только арифметическое - 0,5 - округляется всегда вверх.
← →
VICTOR_ (2014-10-01 16:46) [16]
> >для бухгалтерии есть бухгалтерское округление
> Задачу разброса копеек оно не решает
Верно, нужен "расбрасыватель" копеек по правилу :)
← →
Inovet © (2014-10-01 17:21) [17]Сортируется по убыванию сумм и остаток добавляется/снимается по 1 копейке от больших к меньшим.
← →
Inovet © (2014-10-01 17:21) [18]Но это не вопрос сабжа.
← →
BadTeacher (2014-10-02 23:10) [19]
procedure TForm1.FormCreate(Sender: TObject);
const
a :Single = -12399.0992345;
var
p,f :Integer;
s :String;
begin
p := Trunc(Int( a ));
f := Trunc(Int(Frac(Abs( a ))*100));
SetLength(s, 1024);
SetLength(s, wsprintf(PChar( s ),"%i,%#02i", p , f ));
Caption := s;
end;
← →
Jeer © (2014-10-03 09:39) [20]>BadTeacher (02.10.14 23:10) [19]
Чукча, см. желалки в [2] и ответ в [3]
← →
Чукча (2014-10-03 22:51) [21]то Jeer
>Как мне оставить 2 числа после запятой ? Не округлить ! Ибо если округлить, то получится 100, а просто оставить 2 числа после запятой.
> Я хочу просто выбросить лишние числа.
> По сути я могу перевести Float в String, отбросить лишнее, а потом опять перевсти в Float и уже работать с числом, но это мне кажется муторнее.
==> [19]
А открывать парню глаза на то, что19,540
+
19,54 / 10 = 1,954
+
19,54 / 20 = 0,977
=
22,471 != 22,46
это уже работа для Вас!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2016.04.24;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c