2010-11-14 76 views
0

是什么在后记后记一般问题

/Total psi.subtotal Total add def\n 

以下几条平均ps1.subtotal是我在其他地方居住,并为货币数据类型的变量(例如:10.00美元)

按我的理解上面的代码行添加psi.subtotal和Total,然后将结果存储在Total中。 如果是这样,我看到这个PS在上面的线出错。我在一些地方也看到,即使对于整数加法,变量也首先转换为字符串,然后对变量执行加法或任何其他操作。 是这样吗?

感谢

+0

这基本上是'Total'(name)='psi.subtotal'(一个值)+'Total'(值,再次)。不过,我并不熟悉在PostScript中使用实际数据类型或货币的功能。 – Joey 2010-11-14 14:52:17

+0

您发布的代码没有任何问题。它对我的翻译工作正常。请将您的程序降至实际失败的问题案例,并描述您所得到的实际错误。 – 2010-11-14 15:00:13

回答

1

AFAIK没有货币数据类型,所以我想这两个psi.subtotalTotal是类型真正的。 add操作添加整数实数PostScript Language Reference写得相当不错,而且相对容易理解,其数据类型为page 48,算术运算符为page 66。 “

1

”上面的代码行添加了psi.subtotal和Total,然后将结果存储在Total中“是对代码应该做什么的很好的总结。

PostScript没有内置货币类型(请参阅PostScript语言参考第3版,第3.3节)。创建类似货币类型的东西并不难。一种方法是通过定义一个自定义添加操作符。

变量通常通过将一个对象(如数字)推到操作数栈上来工作。内置的add运算符只能用于数字(同上,第527页)。例如,如果您尝试使用字符串,您将看到'typecheck'错误。

但是,您提供的代码不能保证psi.subtotal和Total是货币值(无论货币是什么意思)。没有办法知道代码是否运行标准的“添加”。

这将有助于了解错误的细节,以及如何在代码执行之前定义Total和psi.subtotal。并且是否添加已被重新定义。

下面的代码显示了你的代码如何表示两种不同的东西。

(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