いろいろとすみません。非常に助かっています。
>>56
>>58の四捨五入方法にしてデータをまとめてみました。(x方向のみ)

ウィンドウ: WX1 = -50, WX2 = 50 (幅: 100)
ビューポート: VX1 = -67, VX2 = 67 (幅: 134)

位置: PX → QX への座標変換は
 [式A] QX = ((PX - WX1) * (VX2 - VX1) + (WX2 - WX1) * VX1) / (WX2 - WX1) において
 分子: a = (PX - WX1) * (VX2 - VX1) + (WX2 - WX1) * VX1
 分母: b = WX2 - WX1
として、四捨五入を行う以下の整数除算により行う。
 [式B] QX = K * (2 * a + b) / (2 * b)
 ※ 係数 K は (a > 0 かつ b > 0) の場合 1、それ以外で -1 とする。
   また、a, b は絶対値を用いる。
   (上記式では、負数の場合も正方向へ四捨五入するためこのようにしました)
問題のあるデータは・・・

PX = -28 のとき QX = (-1) * (2 * abs(-3752) + 100) / (2*100) = 38.02
QX の結果 API = -37, [式B] = -38, [式A(double)] = -37.52
※ 四捨五入対象なのに API ではされていない。

PX = -25 のとき QX = (-1) * (2 * abs(-3350) + 100) / (2*100) = 34.00
QX の結果 API = -33, [式B] = -34, [式A(double)] = -33.50
※ 四捨五入対象なのに API ではされていない。

PX = 22 のとき QX = 1 * (2 * abs(2948) + 100) / (2*100) = 29.98
QX の結果 API = 30, [式B] = 29, [式A(double)] = 29.48
※ 四捨五入対象ではないのに API ではされている。

以上のように [式A(double)] の結果の小数部が 0.5 前後のデータでAPI と誤差が発生しています。
他のデータでは、四捨五入が正の数ではプラス方向へ、負の数ではマイナス方向へ正しく行われて API、[式B] とで誤差は発生しません。