Нельзя преобразовать тип string к real как исправить

Перевод из string в real Pascal Решение и ответ на вопрос 1860129

0 / 0 / 0

Регистрация: 25.11.2016

Сообщений: 1

1

25.11.2016, 21:58. Показов 18289. Ответов 2


В общем: мне нужно перевести из величины string в величину real (НЕ INTEGER), мне нужна команда, вроде strtoint(a,b), только strtoreal(a,b), только она, скорее всего по-другому как-то пишется. Помогите)

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

25.11.2016, 21:58

Ответы с готовыми решениями:

Нельзя преобразовать тип function(x: real): real к real
var
g,s,s1,s2,fi,h:real;
label k;
begin
write(‘Vvedite visotu’);
readln(h);k:
write(‘Vvedite…

Как определить, к какому типу данных (integer, real, string, char и т.д) относится число или слово
Всем привет! Такой вопрос. Пользователь вводит с клавиатуры значение переменной с помощью…

Нельзя преобразовать тип array [1..100] of real к real
Помогите в чем здесь ошибка.
Выводить ошибку:
Program4.pas(10) : Нельзя преобразовать тип array …

Перевод из string в longint
есть задача дана строка с символами и числами, надо убрать все символы и оставить одни числа из…

2

1642 / 1091 / 487

Регистрация: 17.07.2012

Сообщений: 5,345

26.11.2016, 02:16

2

StrToFloat



0



Cyborg Drone

Модератор

9481 / 4805 / 3211

Регистрация: 17.08.2012

Сообщений: 15,047

27.11.2016, 14:50

3

Лучший ответ Сообщение было отмечено vova_dragun как решение

Решение

Цитата
Сообщение от vova_dragun
Посмотреть сообщение

strtoint(a,b)

Перечитайте описание функции. У данной функции всего один аргумент, и правильно будет, например,

Pascal
1
b := StrToInt(a); //или, если аргумент типа real, b := StrToFloat(a);

Кроме функции StrToFloat, которая есть не во всех диалектах паскаля, можно применить процедуру val.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

27.11.2016, 14:50

Помогаю со студенческими работами здесь

Ошибка: Нельзя преобразовать тип function x real real к real
Здравствуйте, не могу понять как исправить ошибку (строка 32)

var
a,b,e,h,xi,fi,ln1,ln2:real;…

String в real
Можете подсказать, как преобразовать string в real? Ситуация примерно такая:
1. Вводятся число№1 и…

Нельзя преобразовать тип function(x: real): real к real
Здравствуйте! Не могу написать формулу. Ошибка:Нельзя преобразовать тип function(x: real): real к…

Нельзя преобразовать тип function(x: real): real к real
Ничего не понимаю, почему нельзя? Помогите пожалуйста найти ошибку в коде.
uses CRT;
type

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

Или воспользуйтесь поиском по форуму:

3

Неописанная переменная

begin
  S := 1; // Неизвестное имя S
end.

Все используемые переменные должны быть предварительно описаны с помощью ключевого слова var (внутри блока begin/end или, что обычно хуже, в разделе описаний вначале программы).

Отсутствующая ;

begin
  var S: integer 
  S := 1;         // Компилятор здесь скажет: Ожидалась ; — имеется ввиду предыдущая строка!
end.
begin
  var S := 1 
  S := S + 1  // Аналогично: проблема на предыдущей строке, а на текущей нет, потому что после неё идёт end.
end.

Очень частая ошибка у начинающих. Курсор, как правило, позиционируется в начале следующей строки.

Несовместимость типов при присваивании

begin
  var S: integer := 1.3; // Нельзя преобразовать тип real к integer
end.

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

Чтобы не ошибаться в подобных простых случаях в Паскале есть следующая краткая форма объявления и инициализации переменной:

begin
  var S := 1.3; // Тип real будет выведен компилятором автоматически
end.

Отсутствие закрывающего апострофа литеральной строки

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln('Результат сложения равен =, x + y); // Не хватает закрывающего апострофа
end.

Закрыть апостроф надо на той же строке, где расположен открывающий апостроф

Ошибки расстановки запятых и апострофов при выводе строк и выражений

begin
  var x := 2;   // x получает тип integer
  var y := 3;   // y получает тип integer
  writeln(x, '+,' y, '=', x+y); // Неверная расстановка запятых и апострофов
end.

Слишком много запятых и апострофов рядом, потому начинающие часто путаются  :)
Надо уяснить правила:

  • запятые разделяют разные элементы вывода
  • все, что находится в апострофах, будет выведено на экран без изменений

Ошибка ввода

begin
  var x: integer;
  read(x); // введите блаблабла и посмотрите, что получится
end.

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

Аналогичный фрагмент в более современном и предпочтительном синтаксисе:

begin
  var x := ReadInteger;
end.

Ошибка неинициализированной переменной

begin
  var x: integer;
  // Забыли инициализировать или ввести x
  var r := x * x;  // r получает тип integer
  writeln('Квадрат числа ', x, ' = ', r);
end.

Перед использованием любую переменную надо ввести или присвоить ей начальное значение. Это действие называется инициализацией переменной.

Деление на 0

begin
  var x := 0;
  var c := 666 div x; // Здесь происходит деление на 0
end.

Если во время выполнения программа выполнит деление на 0, то она завершится с ошибкой.

Корень из отрицательного числа

begin
  writeln(sqrt(-1)); // Корень из отрицательного числа 
end.

В обычном Паскале возникает ошибка времени выполнения.
В PascalABC.NET выводится NaN — Not a Number

Ссылки

  • Программы для начинающих
  • Сайт PascalABC.NET: Программы и алгоритмы для начинающих

quloucou628

quloucou628

Вопрос по информатике:

Pascal abc
var
a,c,d: real;
b:char;
begin
…..
if b=’+’ then
d:=a+b;
…..

выдает ошибку «нельзя преобразовать тип string к real»

что делать?

Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?

Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок — бесплатно!

Ответы и объяснения 1

jondeiorost789

jondeiorost789

Что означают твои многоточия ? 

Знаете ответ? Поделитесь им!

Гость

Гость ?

Как написать хороший ответ?

Как написать хороший ответ?

Чтобы добавить хороший ответ необходимо:

  • Отвечать достоверно на те вопросы, на которые знаете
    правильный ответ;
  • Писать подробно, чтобы ответ был исчерпывающий и не
    побуждал на дополнительные вопросы к нему;
  • Писать без грамматических, орфографических и
    пунктуационных ошибок.

Этого делать не стоит:

  • Копировать ответы со сторонних ресурсов. Хорошо ценятся
    уникальные и личные объяснения;
  • Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не
    знаю» и так далее;
  • Использовать мат — это неуважительно по отношению к
    пользователям;
  • Писать в ВЕРХНЕМ РЕГИСТРЕ.

Есть сомнения?

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

Трудности с домашними заданиями? Не стесняйтесь попросить о помощи —
смело задавайте вопросы!

Информатика — наука о методах и процессах сбора, хранения, обработки, передачи, анализа и оценки информации с применением компьютерных технологий, обеспечивающих возможность её использования для принятия решений.

У меня есть CSV-файл, который имеет первые 7 столбцов как varchar (строка), в то время как остальные из них имеют тип данных ‘Real’. Я считаю, что .NET-эквивалент Real — Single.

В любом случае, я попробовал следующее на основе предложения:

,(Import-Csv -Path ".Fact.csv") | Write-SqlTableData -ServerInstance "server.db.com" -DatabaseName
 "TestDB" -SchemaName "dbo" -TableName "Fact" -Force

И я получил эту (ожидаемую) ошибку:

Write-SqlTableData : The given value of type String from the data source cannot be converted to type real of the specified target column.

Вопрос в том, как заставить эту утилиту принимать реальные типы данных?

Пример файла csv:

BGSC,MYTrim Code,CC,OC,Ctry Of Prod,Report Year,Scenario,Volume,Gross Revenue ,SA ,ANSR, TM  ,TL,"P and Warranty, others",CM ,Total Variable,Variable Profit , EBIT  
TOTAL_CKD,TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM,COS_AU,4F80, ,2015,Current, -   , -   , -   , -   , -   , -   , -   , -   , -   , -   ," (136,748)"
CXXXXXXXXXX,TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM,COS_AU,4F80, ,2013,Current, -   , -   , -   , -   , -   , -   , -   , -   , -   , -   ," 1,647 "
CXXXXXXXXXX,TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM,COS_AU,4F80, ,2014,Current, -   ," 16,098 ", (0)," 16,098 ", 1 , -   , 8 ," 16,090 ", -   ," 16,090 "," 61,219 "
CXXXXXXXXXX,TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM,COS_AU,4F80, ,2015,Current, -   ," (12,496)", -   ," (12,496)"," (13,386)", -   , -   , 890 , -   , 890 , (192)

3 ответа

Я согласен с Томасом, что ваш CSV-файл находится в очень плохом состоянии. Заголовки окружены пробелами, а также данными. Некоторые числовые значения заключены в квадратные скобки, а другие — нет, и могут включать или не включать символ разделителя тысяч , (в вашей локали).

Я бы предложил кое-что почистить так:

$csv = Import-Csv -Path ".Fact.csv"
# clean up the CSV
# get the header names from the first row, trim whitespaces and surround with quotes
$headers = ($csv[0].PSObject.Properties.Name.Trim()  | ForEach-Object { '"{0}"' -f $_ }) -join ','

# loop through all data rows in the csv. (each row is a PSObject with properties)
$data = foreach($item in $csv) {
    # loop through all properties (fields) in the item
    $row = foreach($field in $item.PSObject.Properties.Value) {
        '"{0}"'-f ($field -replace '[s(),]' -replace '-', '0')
    }

    $row -join ','
}
# recombine the headers with the data
$newCsv = $headers, $data

# output on screen if you like
$newCsv | Format-Table -AutoSize

# save to a new file and use that for writing to the sql table
$newCsv | Export-Csv -Path ".Fact2.csv" -NoTypeInformation
,(Import-Csv -Path ".Fact2.csv") | Write-SqlTableData -ServerInstance "server.db.com" -DatabaseName "TestDB" -SchemaName "dbo" -TableName "Fact" -Force

Вот как будет выглядеть CSV после очистки:

"BGSC","MYTrim Code","CC","OC","Ctry Of Prod","Report Year","Scenario","Volume","Gross Revenue","SA","ANSR","TM","TL","P and Warranty, others","CM","Total Variable","Variable Profit","EBIT"
"TOTAL_CKD","TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM","COS_AU","4F80","","2015","Current","0","0","0","0","0","0","0","0","0","0","136748"
"CXXXXXXXXXX","TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM","COS_AU","4F80","","2013","Current","0","0","0","0","0","0","0","0","0","0","1647"
"CXXXXXXXXXX","TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM","COS_AU","4F80","","2014","Current","0","16098","0","16098","1","0","8","16090","0","16090","61219"
"CXXXXXXXXXX","TOTAL_MODEL_YEAR_AND_GLOBAL_TRIM","COS_AU","4F80","","2015","Current","0","12496","0","12496","13386","0","0","890","0","890","192"

И не должно быть проблем с преобразованием этих значений в тип ‘Real’

Файл CSV не определяет тип значения. Он имеет только заголовки и поля данных. При импорте все данные имеют тип String. Write-SqlTableData командлет (пытается) преобразовать эти значения в тип данных, как определено в таблице


0

Theo
11 Май 2020 в 13:53

Следующий код преобразует ваши «числа» в целые числа. Я определил функцию для очистки ваших числовых строк. Затем я использовал Select-Object, чтобы переопределить некоторые из ваших свойств:

function Sanitize-String {
    param(
        $String
    )

    if ($String -match '^-s*$') {
        return "0"
    } else {
        return (($String -replace '["s,]', '') -replace '((d+))', '-$1')
    }
}

Import-Csv -Path ".Fact.csv" | Select-Object -Property BGSC, 
    'MYTrim Code', 
    CC, 
    OC, 
    'Ctry Of Prod', 
    'Report Year', 
    Scenario, 
    @{Name='Volume';Expression={[int](Sanitize-String -String $_.Volume)}}, 
    @{Name='Gross Revenue';Expression={[int](Sanitize-String -String $_.'Gross Revenue ')}},
    @{Name='SA';Expression={[int](Sanitize-String -String $_.'SA ')}},
    @{Name='ANSR';Expression={[int](Sanitize-String -String $_.ANSR)}},
    @{Name='TM';Expression={[int](Sanitize-String -String $_.'TM ')}},
    @{Name='TL';Expression={[int](Sanitize-String -String $_.'TL')}},
    @{Name='P and Warranty, others';Expression={[int](Sanitize-String -String $_.'P and Warranty, others')}},
    @{Name='CM';Expression={[int](Sanitize-String -String $_.'CM ')}},
    @{Name='Total Variable';Expression={[int](Sanitize-String -String $_.'Total Variable')}},
    @{Name='Variable Profit';Expression={[int](Sanitize-String -String $_.'Variable Profit ')}},
    @{Name='EBIT';Expression={[int](Sanitize-String -String $_.'EBIT ')}}

Это работает, но, честно говоря, ваш CSV-файл беспорядок. Можно иметь свойства, включая пробелы. Но действительно ли вам нужно (несколько) начальных или конечных пробелов в имени свойства? Кроме того, попытайтесь вставить числа как можно более сырыми. Не вставляйте кавычки, скобки, пробелы вокруг ваших чисел. Вставьте 0 напрямую вместо -.


Более автоматизированный способ:

function Sanitize-String {
    param(
        $String
    )

    if ($String -match '^-s*$') {
        return "0"
    } else {
        return (($String -replace '["s,]', '') -replace '((d+))', '-$1')
    }
}

$csvContent = Import-Csv -Path ".Fact.csv" 

$results = @()
foreach ($line in $csvContent) {
    $i = 0
    $result = New-Object -TypeName psobject
    foreach ($prop in $line.PSObject.Properties) {
        if ($i -lt 7) {
            $result | Add-Member -MemberType $prop.MemberType -Name $prop.Name -Value $prop.Value
        } else {
            $result | Add-Member -MemberType $prop.MemberType -Name $prop.Name -Value ([int](Sanitize-String -String $prop.Value))
        }
        $i++
    }
    $results += $result
}
$results # pipe to your DB for example


0

Thomas
11 Май 2020 в 19:28

@izhaks

При попытке компиляции программы:

var some_var: (real, real) := (1, 2);
begin end.

компилятор выдаёт ошибку:

Возможны два преобразования типа: к типу Tuple<real,real> и к типу Tuple<real,real>

Вероятно, имелось в виду: «к типу Tuple<integer,integer> и к типу Tuple<real,real>»,
но в то же время, странно, что здесь вообще есть ошибка, ведь «some_var» явно указан как (real, real).

PascalABC.net версии 3.6.3 сборка 2547 (01/07/2020)

Спасибо.

@SunSerega

У меня в последней (самособранной) версии выдаёт:
Нельзя преобразовать тип Tuple<integer,integer> к Tuple<real,real>.

Вообще всегда лучше писать var some_var := (1.0, 2.0), так на много короче.
Ну, стоит ещё дождаться что скажут разработчики.

Если когда то выдавало Возможны два преобразования типа — значит, наверное, компилятор пытался преобразовать (1,2) в (real,real). То есть алгоритм этого преобразования уже есть в компиляторе, надо только починить.

@izhaks

С простыми, массивами, записями и множествами такой проблемы не наблюдается:

var some_var: real := 1;                            // 1
var some_arr: array of real := (1, 2);              // [1,2]
var some_rec: record a, b: real end := (a:1; b:2);  // (1,2)
var some_set: set of real := [1, 2];                // {2,1} 

Предположу, что с кортежами тоже планировалось автоматическое преобразование компилятором к нужному типу.
Пример MovingFrameBasedTime.pas содержит строки:

Key.Left: c.Direction := (-5, 0);
Key.Right: c.Direction := (5, 0);
Key.Up: c.Direction := (0, -5);
Key.Down: c.Direction := (0, 5);

...

c.Direction := (0, 0);

которые как раз не компилируются теперь (с этой ошибкой).

(P. S. Также нужно добавить uses GraphWPF; в MovingFrameBasedTime.pas)

@miks1965

Скачайте последнюю версию.
Ошибка

Нельзя преобразовать тип Tuple<integer,integer> к Tuple<real,real>

и она правильная. Никто не предполагал делать преобразование между этими типами.

С простыми, массивами, записями и множествами — это специальные инициализаторы, которые работают и в Delphi. Мы делали это для совместимости. С кортежем — другая история. Это NET-тип и Tuple<integer,integer> и Tuple<real,real> неявно друг в друга не преобразуютсчя. Как и List < integer > и List < real >

Пример MovingFrameBasedTime.pas мы немного исправили — работающая версия на сайте. Но вы пишете об ошибке, которая могла быть в ранних версиях — сейчас её нет.

@izhaks

@miks1965
Версия 3.6.3, сборка 2657 (15/08/2020):

image

@SunSerega

А у меня на той же версии компиляция почему то проходит успешно:

image

@izhaks

Я скачал новую версию отсюда:
http://pascalabc.net/downloads/PascalABCNETSetup.exe
Перед установкой удалил старую версию (сделал Uninstall).

В классе ObjectWPF определено свойство Direction:
property Direction: (real,real) read (Dx,Dy) write (Dx,Dy) := (value[0],value[1]);

т.е. если я правильно понял разработчиков, здесь всё-таки будет ошибка:
Нельзя преобразовать тип Tuple<integer,integer> к Tuple<real,real>

Значит, нужно исправить на:
Key.Left: c.Direction := (-5.0, 0.0);

Но почему, в последней версии, у меня осталось старое сообщение об ошибке?

@miks1965

А какая у вас версия .NET установлена? Мы замечали, что эта ошибка как-то с ней связана.

@SunSerega

image

@miks1965

У вас всё понятно — у вас всё работает

@izhaks

@miks1965
У меня установлен и используется .NET версии 4.8.3752.0

image

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Пожалуйста, выделяйте текст программы тегом [сode=pas] … [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.


    Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
    1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
    2. Как «свернуть» программу в трей.
    3. Как «скрыться» от Ctrl + Alt + Del (заблокировать их и т.п.)
    4. Как прочитать список файлов, поддиректорий в директории?
    5. Как запустить программу/файл?
    … (продолжение следует) …


    Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
    Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


    Внимание
    Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
    Повторная попытка — 60 дней. Последующие попытки бан.
    Мат в разделе — бан на три месяца…

    >
    Перевод из Real в String

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    29.09.03, 12:44

      Подскажите пожалуйста как перевести из Real в String.
      Из Integer в String без проблем, а вот с Real проблема.
      Как можно перевести?
      Заранее спасибо.

      Master

      Chow



      Сообщ.
      #2

      ,
      29.09.03, 12:48

        FloatToStr() ?


        Булат Шакиров



        Сообщ.
        #3

        ,
        29.09.03, 12:51

          str


          ZEE



          Сообщ.
          #4

          ,
          29.09.03, 12:56

            Format


            soevan



            Сообщ.
            #5

            ,
            29.09.03, 13:08

              Chow спасибо!   ;)


              ZEE



              Сообщ.
              #6

              ,
              29.09.03, 13:10

                + Сhow #1
                FloatToStrF()


                soevan



                Сообщ.
                #7

                ,
                29.09.03, 13:13

                  Chow спасибо!   ;)


                  soevan



                  Сообщ.
                  #8

                  ,
                  29.09.03, 13:14

                    Chow спасибо!   ;)


                    soevan



                    Сообщ.
                    #9

                    ,
                    29.09.03, 13:20

                      ZEE — к сожалению format не помог, всё равно спасибо за содействие.   ;)

                      З.Ы.
                      d vj`v cgbhnt rhjdb yt j,yfhe;tyyj!


                      ZEE



                      Сообщ.
                      #10

                      ,
                      29.09.03, 14:07

                        >soevan
                        >format не помог
                        но он тоже может переводить «из Real в String»
                        >d vj`v cgbhnt rhjdb yt j,yfhe;tyyj!
                        пить или не пить — вот в чем вопрос?..


                        DVA



                        Сообщ.
                        #11

                        ,
                        29.09.03, 14:23

                          Member

                          **

                          Рейтинг (т): 3

                          Цитата soevan, 29.09.03, 17:20:04

                          ZEE — к сожалению format не помог, всё равно спасибо за содействие.  ;)

                          Видимо это какой-то особенный Real. Или format не той версии…


                          Song



                          Сообщ.
                          #12

                          ,
                          29.09.03, 14:53

                            FloatToStr
                            FloatToStrF
                            FormatFloat

                            хватит? ;)


                            vovs



                            Сообщ.
                            #13

                            ,
                            01.10.03, 09:59

                              Senior Member

                              ****

                              Рейтинг (т): 2

                              Я пользую str
                              str(Real,String);
                              можно  так:
                              str(R:6:6,S);

                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                              0 пользователей:

                              • Предыдущая тема
                              • Delphi: Общие вопросы
                              • Следующая тема

                              Рейтинг@Mail.ru

                              [ Script execution time: 0,0294 ]   [ 16 queries used ]   [ Generated: 11.02.23, 18:48 GMT ]  

                              Понравилась статья? Поделить с друзьями:
                            • Неправильное употребление местоимений какая ошибка
                            • Непонятный почерк как исправить
                            • Неправильно выплатили зарплату как исправить
                            • Нельзя преобразовать тип string к integer как исправить
                            • Неправильное употребление деепричастного оборота какая ошибка