Vai al contenuto
PLC Forum


troncare decimali in un numero reale


Messaggi consigliati

Inserito:

buongiorno a tutti

cercando nei manuali siemens mi sembra di non aver trovato niente che faccia al caso mio.

Io vorrei troncare 5 dei 6 decimali di un numero reale risultato di una divisione per avere un numero reale con solo una cufra decimale cioè da 23,123456 a 23,1.

qualcuno conosce un'istruzione per il 1200 che faccia già questa operazione ?

in un'altro forum ( https://www.plcforum.it/f/topic/170555-taratura-trasduttore/?do=findComment&comment=1238773 ) drugo 66 proponeva di:

 

moltiplicare il real * 1000

convertire in dint

convertire in real

dividere /1000

 

per avere 3 decimali

io dovrei moltiplicare per 10 e dividere per 10 ?

secondo voi funziona?

 

grazie


Inserita:

Non riesco a capire il senso di questa operazione. A cosa ti serve eliminare i decimali?

 

Comunque, per avere 1 cifra decimale (tipo 23.1) puoi moltiplicare per 10 (e ti trovi con 231.23456), eliminare i decimalei con TRUNC o con RND (e ti rimane 231 - vedi nella guida la differenza tra le due operazioni), dividere per 10 e ti trovi con 23.1

Inserita:

Grazie batta

Mi serve perché devo comparare il risultato di una media di pesate da una siwarex con un valore reale inserito in una ricetta che ha solo un decimale, quindi non vorrei che erroneamente il risultato 12,29999 comparato == a 12,3 no sia valido anche se in realtà lo è. 

Mi piace la tua proposta ma mi sa che trunc è rnd non gradiscano i real e poi approssimano all'intero più alto o basso ma potrebbe funzionare lunedì provo

 

Inserita:
Quote

Mi piace la tua proposta ma mi sa che trunc è rnd non gradiscano i real

TRUNC e RND si usano proprio con i REAL, e danno come risultato un DInt.
TRUNC semplicemente taglia la parte decimale. Per esempio, 3.7 diventa 3.

RND invece approssima, Per esempio, 3.7 diventa 4.

Inserita:

E poi, piuttosto che troncare i decimali, non ti conviene, anziché fare una semplice comparazione, utilizzare, per esempio, la funzione IN_Range?

Inserita:

grazie ancora batta

non utilizzo IN_range in quanto devo verificare se il valore pesato è ==,> o < del peso inserito nella ricetta quindi ho utilizzato 3 comparazioni che mi attivano lo scarto e conteggiano il prodotto conforme troppo alto o troppo basso.

alla fine ho optato per la prima soluzione che mi avevi suggerito:

valore*10 --- round --- valore_round/10 

così ottengo il valore con 1 sola cifra decimale e non troppo arrotondato.

 

ciao ciao

Inserita:

Ciao,

secondo me potresti usare la funzione in_range per l'uguale (es 12.3 metti in_range tra 12.25 e 12.35) e poi fai il confronto del maggiore e minore rispettivamente con 12.35 e 12.25

Inserita:

per il confronto ho fatto così ma i valori da comparare me li sono creati come suggerito da batta

 

ciao ciao

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...