Los navegadores truncan los valores de los bordes en enteros

Siempre que se utiliza un valor de píxel no entero para el borde de un elemento, el navegador simplemente trunca el valor para convertirse en un entero. ¿Por qué es este el caso?

Soy consciente de que la frontera noRealmente ocupan parte de un píxel, pero este tipo de valores a veces se usan en combinación con otros para formar píxeles completos. Por ejemplo, los bordes izquierdo y derecho que tienen anchos de 1.6px deberían hacer que el ancho total del elemento aumente en 3px. Esto funciona porqueel valor completo se almacena en la memoria y se usa para los cálculos.

Sin embargo, este no parece ser el caso al representar el borde a pesar de que el ancho, el relleno y el margen se comportan correctamente.

var div = document.getElementsByTagName('div'),
    len = div.length,
    style;
for (var i = 0; i < len; i++) {
    style = getComputedStyle(div[i]);
    div[i].innerHTML = div[i].className + ': ' + style.getPropertyValue(div[i].className) + '<br>height: ' + style.getPropertyValue('height');
}
div {
    width: 300px;
    border: 1px solid black;
    padding: 50px 0;
    text-align: center;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}
div.width {
    width: 300.6px;
}
div.padding-top {
    padding-top: 50.6px;
}
div.margin-top {
    margin-top: 0.6px;
}
div.border-top-width {
    border-top-width: 1.6px;
}
<div class="width"></div>
<div class="padding-top"></div>
<div class="margin-top"></div>
<div class="border-top-width"></div>

Cuando se probó, el código produjo los mismos resultados (sin tener en cuenta la precisión exacta) de manera consistente. La mayoría de los principales navegadores (Chrome, Firefox, Opera) se comportaron igual. Las excepciones fueron Safari 5.1 (que hizo que el relleno y el margen fueran similares al borde, pero esto probablemente solo se deba a la versión) e Internet Explorer (que calculó correctamente el ancho del borde superior).

El ancho, el relleno y el margen se recordaron como valores decimales y permitieron que el relleno afectara la altura en consecuencia, pero el borde no. Fue truncado a un entero. ¿Por qué es esto específicamente solo el borde ancho de la caja? ¿Habría alguna forma de hacer que el valor del borde sea recordado en una forma más completa para que elcierto altura del elemento podría recuperarse usando JavaScript?

Respuestas a la pregunta(2)

Su respuesta a la pregunta