2017-03-05 19 views
2

dat.gui JavaScript 라이브러리로 만든 작은 메뉴가 있습니다. 나는 몇몇 초기 값을 가진 다른 라인을 사용한다. (이 초기 값은 코드 실행 중에 수정된다.)DAT.GUI의 시작 값으로 부동 소수점 표시

예를 들어 "15"값을 표시하는 대신 "15.0000"을 표시하고 싶습니다. 나는 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 φ '); 

지금 내가 시도 :

다음은 원시 (없이 "toFixed(4)"기능) 코드의

var params = { 
    StartingVector : '', 
    ComponentVectorTheta : componentThetaInit.toFixed(4), 
    ComponentVectorPhi : componentPhiInit.toFixed(4) 
    }; 

하지만이 작동하지 않습니다. 값이 더 이상이기 때문에 (코드가 실행되면

no floating displayed

, 4 개의 부동 소수점이 잘 표시됩니다 여기에 내가 실행하기 전에 ("15을"대신 "15.0000"의) 무엇을 얻을의 캡처 아래 없습니다 정수) : 실제로 이것은 "15"대신에 "15.0000"과 같이 표시하고자하는 초기 값 (애니메이션 이전)입니다.

결과는 선언하여 동일합니다 : 나는 또한 시도

var componentThetaInit = 15.0000; 
var componentPhiInit = 15.0000; 

: 사람이 무엇이 잘못되었는지 볼 수 있다면

ComponentVectorTheta : parseFloat(componentThetaInit.toFixed(4)), 
ComponentVectorPhi : parseFloat(componentPhiInit.toFixed(4)) 

것은,이 좋을 것이다.

감사

답변

2

첫째. 누락 된 변수 선언이있었습니다. 나는 추가 :

var minComponentTheta = -10.0; 
var maxComponentTheta = 100.0; 
var minComponentPhi = -100.0; 
var maxComponentPhi = 100.0; 

2) autoPlace, 자본 P)를이어야합니다 autoplace의 PARAM이 (소수점 이하 자릿수와 아무 상관이있다 ... 자동으로 DOM에 UI를 추가 할 수있는 옵션이 나타납니다.

이 문제는 실제로 해결되지 않았습니다. 그것은 자바 스크립트로 시작하는 문제입니다. 이 코드를 콘솔에 넣으면 다음과 같은 문제가 발생합니다.

var a = 15.0000; 
console.log(a); 
// prints 15 and not 15.0000 

숫자가 정수이면 정수입니다. 이 문제를 해결하려면 기본값이 15.0001과 같은 정수가 아닌 값을 가질 수 있습니다.

이것은 아마도 당신이 찾고있는 것이 아닙니다. 따라서 dat.gui.js에 대한 코드를 수정하는 경우 입력 값을 숫자 값의 문자열 버전으로 설정하도록 할 수 있습니다. 다음과 같은 코드를 찾아 아래 코드를 복사하여 붙여 넣습니다. 필자는 함수의 첫 번째 줄 끝에 toFixed를 추가했습니다.값을 얻으면 숫자가 아닌 문자열이되므로 수학을 사용하기 전에 문자열을 사용하기 전에 parseFloat()를 원할 것입니다. unminified JS 버전에서

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); 
}; 

,^당신이 4 decimal places

+0

고마워, 알았어! – youpilat13

1

그냥 같이두고 :

ComponentVectorTheta : componentThetaInit.toFixed(4), 
ComponentVectorPhi : componentPhiInit.toFixed(4) 

이 고려 : 일부 사소한 버그,

a = 15;   // a is an integer now 
b = a.toFixed(4); // b is the string "15.0000" 
c = parseFloat(b); // c is a number (internally, probably an integer) 
d = c.toString(2); // d is the string "1111" 
e = parseInt(d, 2);// e is an integer again 
assert(a === e); // true 
+0

덕분에 원하는 것을이 작동 내가 확인 라인 2050 에, 그래서 당신은 내게 무엇을해야할지 조언을합니까? ** toFixed (**) ** 또는 ** parseFloat ** 만있는 솔루션은 작동하지 않지만 "15.0000"대신 "15"를 표시합니다. – youpilat13

+0

어떤 dat.gui 버전을 사용하고 있습니까? – Andrew

+1

소스 코드를 바탕으로'step' 값을'0.00001'로 설정하고 범위를'0.00001'에서'14.99999'까지 허용하는 것만 큼 확실합니다. 사용자가 "낮은 정밀도"값으로 착륙하는 것이 여전히 가능합니다. 저자는 이것을 제외하고 레이블을 포맷 할 방법을 제공하지 않았습니다. – Andrew