2010-11-14 7 views
0

Qu'est-ce que la moyenne suivante dans PostscriptPostscript question générale

/Total psi.subtotal Total add def\n 

Ici ps1.subtotal est une variable que j'ai peuplé ailleurs et est la monnaie de type de données (par exemple: 10.00 USD)

par ma compréhension la ligne de code ci-dessus ajoute psi.subtotal et Total, puis stocke le résultat dans Total. Si tel est le cas, je vois ce message PS sur erreur à la ligne ci-dessus. J'ai également vu dans certains endroits que même pour des ajouts d'entiers, les variables sont d'abord converties en chaînes et ensuite l'addition ou toutes les autres opérations sont effectuées sur la variable. Est-ce le cas?

Merci

+0

Ceci est fondamentalement 'Total' (le nom) =' psi.subtotal' (une valeur) + 'Total' (la valeur, encore une fois). Toutefois, je ne connais pas la possibilité d'utiliser des types de données ou des devises réels dans PostScript. – Joey

+0

Il n'y a rien de mal avec le code que vous avez posté. Cela fonctionne très bien sur mon interprète. Veuillez réduire votre programme à un cas de problème qui échoue réellement, et décrivez également l'erreur réelle que vous obtenez. –

Répondre

1

AFAIK il n'y a pas monnaie type de données, donc je suppose à la fois psi.subtotal et Total sont du type réel. L'opération add ajoute des nombres de type entier ou réel. Le PostScript Language Reference est écrit assez bon et relativement facile à comprendre, avec les types de données sur page 48 et les opérateurs arithmétiques sur page 66 du PDF.

1

"la ligne de code ci-dessus ajoute psi.sototal et Total, puis stocke le résultat dans Total" est un assez bon résumé de ce que le code devrait faire.

PostScript n'a pas de type de devise intégré (reportez-vous à la section Référence du langage PostScript - 3ème édition, section 3.3). Ce ne serait pas trop difficile de créer quelque chose comme un type de devise. Une façon de le faire serait de définir un opérateur d'ajout personnalisé. Une variable fonctionne généralement en poussant un objet (tel qu'un nombre) sur la pile d'opérandes. L'opérateur d'ajout intégré ne fonctionne que sur les nombres (ibid., Page 527). Si vous l'essayez avec des chaînes, par exemple, vous verrez une erreur 'typecheck'.

Avec le code que vous fournissez, cependant, il n'y a aucune garantie que psi.sototal et Total sont des valeurs monétaires (quelle que soit la devise). Il n'y a aucun moyen de savoir si le code exécute le standard 'add'.

Il serait utile de connaître les détails de l'erreur, et comment Total et psi.sototal sont définis avant l'exécution du code. Et si ajouter a été redéfini.

Le code suivant montre comment votre code peut signifier deux choses différentes.

(Using numbers for currencies...) = 

/psi.subtotal 42.5 def 
/Total 37 def 

/Total psi.subtotal Total add def %%%%%%%%%%%%%%%%%% Your code. 

(Total) print Total == 

(Using strings for currencies...) = 

/psi.subtotal (42.50) def 
/Total (37.00) def 

/standard_add { add } bind def 

/currency_add { % stack: str str -- both string reps of numbers 
    cvr % stack: str num 
    exch % stack: num str 
    cvr % stack: num num 
    standard_add   % stack: num 
    20 string  % stack: num str 
    cvs   % stack: str 
} 
def 

/add { currency_add } def % Override existing add. 

/Total psi.subtotal Total add def %%%%%%%%%%%%%%%%%% Your code. 

(Total) print Total = 

flush