neither of these are “problems”, this is by design
format will round the value to fit the pattern therefore 1.5 shows as two because you provided no pattern for the fractional part
And as discussed on a very recent topic, the decimal point will alway be displayed if specified in the patten

you can do this to “solve” one of the issues you face

result=Format(FLOOR(value),"#,###,##0.###")

refer to the other topics for suggestions about the decimal point

static nationalDecimalPoint as string = replaceall( format(1.1,"0.0"), "1", "")
result=Format(value,"#,###,##0.###")
if result.right(1) = nationalDecimalPoint then
result = result.Left(result.len() - nationalDecimalPoint.Len())
end if