Vai al contenuto
PLC Forum


troncare decimali in un numero reale


vergalabs

Messaggi consigliati

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

Link al commento
Condividi su altri siti


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

Link al commento
Condividi su altri siti

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

 

Link al commento
Condividi su altri siti

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.

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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

Link al commento
Condividi su altri siti

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...