在d3.js中添加新圆后,无法在圆之间创建链接(Can't create links between circles after appending new circles in d3.js)
首先需要说的是,我对d3.js完全不熟悉(我使用的是版本4)。 现在我有嵌套的节点对象,并尝试在单击父元素后绘制子元素。 部分工作原理:我可以绘制子节点,但不能绘制从父圆圈到子圆圈的链接。 我有这个错误:
错误:遗失:哺乳动物
和
TypeError:无法在字符串'mammal'上创建属性'vx'
看起来
source
创建成功,但第一个链接和其他链接的target
中断:我不确定问题出在哪里,所以我创建了一个我现在所有代码的小提琴: https : //jsfiddle.net/L6c6pxrv/4/
@KEKUATAN建议我为
links
分配新数组,不要推送每个项目。 结果是: https : //jsfiddle.net/L6c6pxrv/3/ 。 没有错误,但看起来链接仍然不知道源和目标的坐标。这是我在圆圈点击之后想要实现的(这里我使用固体数组节点和链接从一开始就定义): https : //jsfiddle.net/L6c6pxrv/2/
谢谢你的帮助!
First need to say, that I'm totally new to d3.js (I'm using version 4). For now I have nested object of nodes and trying to draw child elements after clicking parent. And it works partly: I can draw child nodes, but not links from parent circle to child circles. I've got this errors:
Error: missing: mammal
and
TypeError: Cannot create property 'vx' on string 'mammal'
Looks like
source
created successfully, buttarget
breaks at the first link and others:I'm not sure where the issue is, so I have created a fiddle with all code that I have for now: https://jsfiddle.net/L6c6pxrv/4/
@KEKUATAN suggested me to assign new array to
links
, don't push each item. The result is: https://jsfiddle.net/L6c6pxrv/3/. There is no errors anymore, but looks like links still doesn't know coordinates of source and target.Here is what I'm trying to achieve after circle click (here I'm using solid array of nodes and links are defined from the very beginning): https://jsfiddle.net/L6c6pxrv/2/
Thanks for any help!
原文:https://stackoverflow.com/questions/46263992
最满意答案
这应该这样做:
BigDecimal bg1 = new BigDecimal(16.543242123); bg1 = bg1.setScale(1, BigDecimal.ROUND_HALF_EVEN); System.out.println(bg1.toString()); //16.5 BigDecimal bg2 = new BigDecimal(3.35); bg2 = bg2.setScale(1, BigDecimal.ROUND_HALF_EVEN); System.out.println(bg2.toString()); //3.4 BigDecimal bg3 = new BigDecimal(6.3456); bg3 = bg3.setScale(1, BigDecimal.ROUND_HALF_EVEN); System.out.println(bg3.toString()); //6.3
This should do it:
BigDecimal bg1 = new BigDecimal(16.543242123); bg1 = bg1.setScale(1, BigDecimal.ROUND_HALF_EVEN); System.out.println(bg1.toString()); //16.5 BigDecimal bg2 = new BigDecimal(3.35); bg2 = bg2.setScale(1, BigDecimal.ROUND_HALF_EVEN); System.out.println(bg2.toString()); //3.4 BigDecimal bg3 = new BigDecimal(6.3456); bg3 = bg3.setScale(1, BigDecimal.ROUND_HALF_EVEN); System.out.println(bg3.toString()); //6.3
相关问答
更多-
您可以使用setScale()将小数位数减少为零。 假设value包含要舍入的值: BigDecimal scaled = value.setScale(0, RoundingMode.HALF_UP); System.out.println(value + " -> " + scaled); 使用round()有更多的参与,因为它需要你指定要保留的位数。 在你的例子中,这将是3,但这对所有的值是无效的: BigDecimal rounded = value.round(new MathContext(3 ...
-
一个重要的提到但并不直接解决的一点是“精度”和“规模”之间的差异以及它们在两个语句中的使用。 “precision”是数字中有效数字的总数。 “scale”是小数点右侧的位数。 MathContext构造函数只接受precision和RoundingMode作为参数,因此在第一个语句中不会指定scale。 setScale()显然可以接受scale作为参数,也可以接受RoundingMode,但是在第二个语句中不会指定精度。 如果您将小数点向右移动一个位置,差异将变得清楚: // 1. new BigDec ...
-
这应该这样做: BigDecimal bg1 = new BigDecimal(16.543242123); bg1 = bg1.setScale(1, BigDecimal.ROUND_HALF_EVEN); System.out.println(bg1.toString()); //16.5 BigDecimal bg2 = new BigDecimal(3.35); bg2 = bg2.setScale(1, BigDecimal.ROUND_HALF_EVEN); Sys ...
-
BigDecimal错误(BigDecimal Error)[2022-10-09]
你仍然要通过 double 。 无处不在坚持BigDecimal : BigDecimal k = BigDecimal.ZERO; while (rst.next()) { k = k.add(new BigDecimal(rst.getString(5)); } 另外 - 最好是,如果数据库中的字段实际上是一个十进制值: BigDecimal k = BigDecimal.ZERO; while (rst.next()) { k = k.add(rst.getBigDecimal(5) ... -
这不是一个错误。 作为双字面量的0.35表示一个不完全等于0.35的值; 它可能是0.349999995之类的东西。 所以它下降。 String构造函数允许您使用“0.35”精确指定0.35,然后向上舍入。 不要在这里使用double构造函数; 当它足够重要使用BigDecimal你需要远离浮点土地。 This isn't a bug. 0.35 as a double literal represents a value that is not exactly equal to 0.35; it's li ...
-
使用bigdecimal [重复]将Java计算整除3到100(Java calculation divisible by 3 to hundred using bigdecimal [duplicate])[2024-03-04]
.setScale(0, RoundingMode.HALF_UP); 是你在找什么。 .setScale(0, RoundingMode.HALF_UP); Is what you're looking for. -
这是因为代表性问题。 实际值123.1111d可以是123.111091231918498。 这就是为什么当你想要精确的值时,建议使用字符串构造函数。 This is because of representation problem. The value 123.1111d in reality can be something like 123.111091231918498. That why it is recommended to use string constructor when you w ...
-
javadoc说...... 抛出: ArithmeticException - 如果divisor == 0,或者roundingMode == ROUND_UNNECESSARY,this.scale()不足以完全表示除法的结果。 因此,如果scale()不够,则会发生ArithmeticException ,这个假设似乎是正确的 ; 即余数不为零。 The javadoc says... Throws: ArithmeticException - if divisor==0, or roundingM ...
-
就像是 : BigDecimal intvalue= new BigDecimal("0.5"); intvalue = intvalue.setScale(0, RoundingMode.HALF_UP); Something like : BigDecimal intvalue= new BigDecimal("0.5"); intvalue = intvalue.setScale(0, RoundingMode.HALF_UP);
-
Java BigDecimal行为(Java BigDecimal Behaviour)[2022-02-01]
如果我了解你,你就错过了setScale()的结果。 d = d.setScale(4); 编辑 至于你的第二个问题,你可以调用stripTrailingZeros() - d = d.stripTrailingZeros(); If I understand you, you've missed the assignment from the result of setScale(); d = d.setScale(4); Edit As for your second question, you ...