## Precision versus Units

Enter precision in one of the following units: ratio, percent, ppm, dB, Nbits.
Then, click on "Calc Other Units" in the same row.

 Ratio Percent ppm dB Nbits

Equations
ratio = per / 100
per = ratio * 100
ppm = ratio * 1e6
dB = 20*log10( ratio )
Nbits = log2( 1/ ratio)

For a quick tour of some JavaScript / HTML basics, check out Inside the Code.

### JavaScript

Although the form has many buttons named "Cal Other Units", just one function call handles them all. The trick lies in passing a specific text ("ppm", "dB", Nbits", etc.) to the function depending on which button was pressed. The text is passed to the variable "units" inside the routine..

```//////////////////////////////////////////////
// calc Precision
//////////////////////////////////////////////
function get_Precision( units ) {

// get values directly from form
var ratio=document.myForm.ratio.value;
var per=document.myForm.per.value;
var ppm=document.myForm.ppm.value;
var dB=document.myForm.dB.value;
var Nbits=document.myForm.Nbits.value;

// convert entered unit to ratio
if ( units.indexOf("ratio") >= 0) {
ratio = ratio*1;
}
if ( units.indexOf("per") >= 0) {
ratio = per/100;
}
if ( units.indexOf("ppm") >= 0) {
ratio = ppm/1e6;
}
if ( units.indexOf("dB") >= 0) {
ratio = Math.pow(10,dB/20);
}
if ( units.indexOf("Nbits") >= 0) {
ratio = Math.pow(2,-Nbits);
}

// calc all remaining units
per = ratio*100;
ppm = ratio*1e6;
dB = 20*Math.log(ratio)/Math.log(10);
Nbits = Math.log(1/ratio)/Math.log(2);

document.myForm.ratio.value = (ratio).toPrecision(2);
document.myForm.per.value = (per).toPrecision(2);
document.myForm.ppm.value = (ppm).toPrecision(4);
document.myForm.dB.value = (dB).toPrecision(3);
document.myForm.Nbits.value = (Nbits).toPrecision(2);

}
///////////////////////////////////////////////////
```

The code checks which units have been passed using the JavaScript function: units.indexOf("text"). This function return a number indicating the index in the string where "text" is found. If no "text" is found, the function returns a -1.

As far as the calulations go, the code first converts any other units to a ratio. Then, the ratio is converted to all other units.

### HTML

Here's the HTML code for the button next to the "ppm" input box. The function call for this button "get_Precision( 'ppm')"  passes the text 'ppm' to the routine.

<td><input type="text" name="ppm" size="8" value=""></td>
<td><input type="button" value="Calc Other Units"
onclick="get_Precision('ppm')"></td>