Here's my take on it:
(defun C:Dim8thEnds50 ; = Dimension with 1/8th ends rounded to 50 [up]
(/ *ed dsel ddata defpt1 defpt2 defptdist defptang dimlineang
dimlinepos dimmeas raw8th dist8th defptdist8th)
(defun *ed (dxf); = Entity Data value associated with DXF code number
(cdr (assoc dxf ddata))
); defun - *ed
(if
(and
(setq dsel (entsel "\nSelect Dimension to replace with L/8 ends: "))
(member '(0 . "DIMENSION") (setq ddata (entget (car dsel))))
(= (logand 6 (cdr (assoc 70 ddata))) 0); linear/rotated/aligned only
); and
(progn ; then
(setq
defpt1 (*ed 13)
defpt2 (*ed 14)
defptdist (distance defpt1 defpt2)
defptang (angle defpt1 defpt2)
dimlineang (*ed 50)
dimlinepos (*ed 10)
dimmeas (*ed 42)
raw8th (/ dimmeas 8)
dist8th (* (+ (fix (/ raw8th 50)) (if (= (rem raw8th 50) 0) 0 1)) 50)
; nearest multiple of 50, rounded up only if not exact
defptdist8th (* dist8th (/ defptdist dimmeas))
); setq
(cond
((= (logand (*ed 70) 33) 33) (command "_dimaligned"))
((command"_.dimrotated" (angtos dimlineang (getvar 'aunits) 8))); otherwise
); cond
(command
"_non" defpt1 "_non" (polar defpt1 defptang defptdist8th) "_non" dimlinepos
"_.dimcontinue" (polar defpt1 defptang (- defptdist defptdist8th)) "_non" defpt2 "" ""
)
(entdel (car dsel)); remove original
); progn
(prompt "\nNo linear/rotated/aligned Dimension selected."); else
); if
(prin1)
)
It accepts selection of only an appropriate type of Dimension [not angular, diameter, radius, ordinate].
It works even if the definition points do not align in direction with the dimension line, placing the new definition points spaced along the path between the old.
It turns, for example, the red ones here into the green ones:

You can get the text in the middle left-over Dimensions to also show rounded to the nearest multiple of 50, if you want, by setting that in the Dimension Style [but it will round up or down].
It could use the usual enhancements like Undo begin/end wrapping, etc.
Kent Cooper, AIA