Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/65: Рейтинг темы: голосов - 65, средняя оценка - 4.94
1 / 1 / 2
Регистрация: 12.12.2012
Сообщений: 26

Float точка или запятая

19.04.2013, 01:36. Показов 12828. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, моя программа достаёт данные (цены в Евро, Доллары, Рубли) и работает с ними, я написал функцию, которая определяет с какой валютой мы работаем и переводит её в рубли, на этом компьютере всё работает нормально, но на других вылезает ошибка - " '20.26' is not a valid floating point value. "
Почему на одном компьютере всё нормально обрабатывается, на другом нет?
Сама функция
Входные данные которые нужно переводить в рубли имеют следующий вид:
$14.14 USD - доллары
449 pуб. рубли
12.50€ евро

форум автоматически переводит код в символы, там вместо символов €, $, pуб. шестнадцатеричный код символа.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function TForm1.DefineCurrency(price: string): string;
var
st:string;
a:double;
l:integer;
begin
l:=length(price);
if trim(copy(price,l-3,4))='USD' then    //проверяем на доллары
begin
    //st:=StringReplace(price,'.',',',[rfReplaceAll]);
    delete(price,l-3,4);                      //убираем всё лишнее
    delete(price,1,5);
    trim(price);
    a:=StrToFloat(price)*31.50;        //переводим в рубли
    Result:=FloatToStr(a);
end
 else if copy(price,l-5,7)='1073;.' then           //проверяем на рубли
    begin    // Rub
   //st:=StringReplace(price,',','.',[rfReplaceAll]);    
   delete(st,l-16,17);                                //убираем всё лишнее
   Result:=St;
  end
   else if copy(price,l-4,5)='8364;' then   // проверяем на евро
     begin
      //st:=StringReplace(price,',','.',[rfReplaceAll]);
      delete(st,l-6,7);                              // убираем всё лишнее
      a:=StrToFloat(st)*41.15;                   // переводим в рубли
      Result:=FloatToStr(a); 
     end;
end;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2013, 01:36
Ответы с готовыми решениями:

Точка или запятая?
Всем привет. Имеется программа на Delphi. Суть программы, добавляет какие-то данные в базу данных Mysql. Вчера решил добавить данные на...

точка-запятая
Как научить программу просто работать с разными разделителями целой и дробной части-т.е. "." или ","

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

6
angstrom
19.04.2013, 02:23
Настройки компьютеров не совпадают, на одном разделителем является точка на другом запятая. Поиграйся с DecimalSeparator.
1 / 1 / 2
Регистрация: 12.12.2012
Сообщений: 26
19.04.2013, 02:35  [ТС]
angstrom,
Спасибо, посмотрю что можно сделать
0
angstrom
19.04.2013, 02:51
Узнай текущую установку.
Delphi
1
2
3
4
5
var
  DefaultLCID: LCID;
...
  DefaultLCID       := GetThreadLocale;
  DecimalSeparator  := GetLocaleChar(DefaultLCID, LOCALE_SDECIMAL, '.');
Добавлено через 8 минут
Дополнительные функция
Delphi
1
2
3
4
5
6
7
8
9
function GetLocaleChar(Locale, LocaleType: Integer; Default: Char): Char;
var
  Buffer : array[0..1] of Char;
begin
  if GetLocaleInfo(Locale, LocaleType, Buffer, 2) > 0 then
    Result := Buffer[0]
  else
    Result := Default;
end;
1 / 1 / 2
Регистрация: 12.12.2012
Сообщений: 26
19.04.2013, 03:03  [ТС]
Спасибо, я немножко не понял, что эта функция возвращает в первом и втором случае?
Если она проверяет, какой символ установлен в качестве дробного разделителя - то это то, что нужно.
0
angstrom
19.04.2013, 03:14
С функцией GetLocaleChar я погорячился она имеется в SysUtils (привычка в WinAPI всё описывать самому).

Возвращает именно установленный в OS разделитель.
 Аватар для Mawrat
13113 / 5894 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
19.04.2013, 08:37
Могу предложить вот такие функции:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//Преобразует строку в вещественное число. При этом, разделителем целой
//и дробной частей числа может быть любой знак из множества D.
function StrToFloatSafe(const aStr : String) : Extended;
const
  //Множество возможных разделителей целой и дробной части в записи числа.
  D = ['.', ','];
var
  S : String;
  i : Integer;
begin
  S := aStr;
  for i := 1 to Length(S) do
    if S[i] in D then begin
      S[i] := DecimalSeparator;
      Break;
    end;
  Result := StrToFloat(S);
end;
 
//Преобразует строку в вещественное число. При этом, разделителем целой
//и дробной частей числа может быть любой знак из множества D.
//Если строка содержит недопустимую запись числа, то функция возвращает
//значение, равное aDef.
function StrToFloatDefSafe(const aStr : String; const aDef : Extended) : Extended;
const
  //Множество возможных разделителей целой и дробной части в записи числа.
  D = ['.', ','];
var
  S : String;
  i : Integer;
begin
  S := aStr;
  for i := 1 to Length(S) do
    if S[i] in D then begin
      S[i] := DecimalSeparator;
      Break;
    end;
  Result := StrToFloatDef(S, aDef);
end;
 
//Проверка.
procedure TForm1.Button1Click(Sender: TObject);
var
  Num : Extended;
begin
  Num := StrToFloatDefSafe(Edit1.Text, 0);
  ShowMessage(FloatToStr(Num));
end;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.04.2013, 08:37
Помогаю со студенческими работами здесь

VB Recordset --numeric and float-- запятая и точка
проблема: dim rs as recordset dim aa as Double ..... ..... aa=rs.Fields('Summa');

знак для Float (точка и запятая) проблема
в одной проге atof() и fprintf(%f, float_arg) используют точку, в другой запятую =\ обе проги компилю я, а надо чтоб они выбрали что-то...

Точка или запятая. Региональный стандарт
Здравствуйте коллеги. Могу ли я Вас просить о помощи ? :) Столкнулся со следующей проблемой, думаю очень легко решаемой, но я не знаю...

Точка или запятая? вот в чем вопрос(((
Сделал программу в которую вводятся данные она потом считает(данные дробные), я их записываю с запятой, на другом компе нужно вводить с...

Что является десятичным разделителем - точка или запятая?
#include "stdafx.h" #include <stdio.h> #include <math.h> int main() { double eps, s; double node, rekur, x, dx; int i,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru