我正在尝试制作一个标有数字的刻度线的轴。一切正常,除了为轴生成的最后一个数字是0.099999而不是0.01。我从下面的代码中删除了线条绘制部分,但是留下了生成数字的部分。这些是我从以下代码得到的数字:1.0,0.9,0.8,0.7,0.6,0.5,0.4,0.3,0.2,0.09999999(应为0.01)。无论如何都要对数字进行舍入或以不同的方式计算数字以避免舍入误差?
/str 10 string def
/count 0 def
/totalUnits 1 def
/ticks 0.1 def
totalUnits ticks neg 0
{
/loopnum exch def
loopnum 10 str cvrs
/stringnumber exch def % string representing the number
/count count 0.1 add def
} for
答案 0 :(得分:2)
如评论所述,您可以使用整数来避免这个浮点数的怪癖。
/str 10 string def
/count 0 def
/scaling .1 def
10 -1 1{
scaling mul
10 string cvs
%dup =
/stringnumber exch def
/count count 1 add def
} for
这个相同的舍入问题影响所有使用数字的二进制浮点表示的语言,因为1/10分数在其二进制表示中具有重复模式。它的效果相同,为.333333 ...提供十进制表示的1/3。总结这些数量会从截断的(输入)值的底部丢失位。