在 DAT.GUI 中显示带有起始值的浮点数

you*_*t13 4 javascript tofixed dat.gui

我有一个用dat.guiJavaScript 库制作的小菜单。我使用不同的行显示一些初始值(这些初始值在代码执行过程中被修改)。

我的问题是,例如,15我想显示“15.0000”而不是显示值“ ”。我尝试使用toFixed(4)功能但没有成功。

这是原始(没有“ toFixed(4)”函数)代码片段:

var componentThetaInit = 15;
var componentPhiInit = 15;

var gui = new dat.GUI({
 autoplace: false, 
    width: 350, 
    height: 9 * 32 - 1
});

var params = {
StartingVector : '',
 ComponentVectorTheta : componentThetaInit,
 ComponentVectorPhi : componentPhiInit
};

gui.add(params, 'StartingVector').name('Starting Vector :');
controllerComponentVectorTheta = gui.add(params, 'ComponentVectorTheta', minComponentTheta, maxComponentTheta, 0.0001).name('Component θ ');
controllerComponentVectorPhi = gui.add(params, 'ComponentVectorPhi', minComponentPhi, maxComponentPhi, 0.0001).name('Component φ ');
Run Code Online (Sandbox Code Playgroud)

现在我试过:

 var params = {
    StartingVector : '',
     ComponentVectorTheta : componentThetaInit.toFixed(4),
     ComponentVectorPhi : componentPhiInit.toFixed(4)
    };
Run Code Online (Sandbox Code Playgroud)

但这不起作用。下面是我在执行之前得到的内容(“ 15”而不是“ 15.0000”)的捕获:

没有浮动显示

代码运行后,4 个浮点显示得很好(因为值不再是整数):这实际上是我希望显示为“ 15.0000”而不是“ 15”的初始值(动画之前)。

声明的结果是一样的:

var componentThetaInit = 15.0000;
var componentPhiInit = 15.0000;
Run Code Online (Sandbox Code Playgroud)

我也试过:

 ComponentVectorTheta : parseFloat(componentThetaInit.toFixed(4)),
 ComponentVectorPhi : parseFloat(componentPhiInit.toFixed(4))
Run Code Online (Sandbox Code Playgroud)

如果有人能看到出了什么问题,那就太好了。

谢谢

Rob*_*Rob 5

首先,一些小错误。缺少一些变量声明。我补充说:

var minComponentTheta = -10.0;
var maxComponentTheta = 100.0;
var minComponentPhi = -100.0;
var maxComponentPhi = 100.0;
Run Code Online (Sandbox Code Playgroud)

2)自动放置参数(应该是autoPlace,大写P)与小数位无关......它似乎是自动将UI添加到DOM的选项。

这些都没有真正解决问题。这是一个从 javascript 开始的问题。如果您将此代码放在控制台中,您会看到同样的问题:

var a = 15.0000;
console.log(a);
// prints 15 and not 15.0000
Run Code Online (Sandbox Code Playgroud)

当一个数是整数时,它就是一个整数。为了解决这个问题,你可以让你的默认值有一个非整数值,比如 15.0001。

不过,这可能不是您要查找的内容。因此,如果您准备修改 dat.gui.js 的代码,您可以强制它将输入的值设置为数字值的字符串版本。找到看起来像这样的代码,然后复制并粘贴下面的代码来替换它。我只是在函数的第一行末尾添加了一个 toFixed。请注意,当您现在获得该值时,它将是一个字符串而不是数字,因此要对其进行数学运算,您需要在使用它之前对其进行 parseFloat()。

NumberControllerBox.prototype.updateDisplay = function updateDisplay() {
  this.__input.value = this.__truncationSuspended ? this.getValue() : roundToDecimal(this.getValue(), this.__precision).toFixed(this.__precision);
  return _NumberController.prototype.updateDisplay.call(this);
};
Run Code Online (Sandbox Code Playgroud)

在未缩小的 JS 版本中,^ 位于 2050 行。我验证了这可以正常工作 4位小数