我对以下代码段有疑问:
str.charAt(i) - '0'
有人可以告诉我为什么会考虑var text=svg.selectAll('.legend')
.data(pie(dataset))
.enter()
.append("text")
.attr('class','legend')
.attr("transform", function(d) { return "translate(" + labelArc.centroid(d) + ")"; })
.attr("dy", "20px")
,它会做什么?
另外,为什么结果乘以10?
谢谢!
答案 0 :(得分:0)
通过执行Str.CharAt(i) -'0'
,只需将字符转换为实数值,前提是该字符位于0 .. 9范围内。
result = result * 10
事情是"转移"之前的结果是左(十进制基数),因为检测到了一个新数字(并添加到结果中)
此代码可能正在执行字符串到整数转换,也是一个糟糕的转换,因为12AAA34
似乎会转换为1234
,因为只会跳过非数字图表。如果在找到非数字字符时解析就停止了会更好,就像C atoi
那样(仍然接受/跳过空格)
答案 1 :(得分:0)
首先考虑这个Str.CharAt(i) - '0'
是因为Str.CharAt(i)
和'0'
都返回其ascii值为整数的字符。
这意味着获取字符串Str
的值将获取字符串(i
)的索引号Str
处的字符。例如,考虑这个字符串Emil
。
然后"Emil".CharAt(0);
会给我E
。但是E
的ascii值为69
,这是一个整数。此外,0
的ascii值为48
。因此"Emil".CharAt(0); - 0
相当于69 - 48
(因此减去两个整数值)并返回21
的整数。
它(Str.CharAt(i) - 0
)被添加到results * 10
的结果中,因为Str.CharAt(i) - 0
返回一个字符,它也可以在java中被识别为整数(ascii)。
查看this stackoverflow page,其中还有 ascii 到 字符表,以便您了解更多信息。