code: func (d Duration) RoundFrac(fsp int) (Duration, error) {
  	fsp, err := CheckFsp(fsp)
  	if err != nil {
  		return d, errors.Trace(err)
  	}
  
  	if fsp == d.Fsp {
  		return d, nil
  	}
  
  	n := gotime.Date(0, 0, 0, 0, 0, 0, 0, gotime.Local)
  	nd := n.Add(d.Duration).Round(gotime.Duration(math.Pow10(9-fsp)) * gotime.Nanosecond).Sub(n)
  	return Duration{Duration: nd, Fsp: fsp}, nil
  }
docs: // RoundFrac rounds fractional seconds precision with new fsp and returns a new one.
  // We will use the “round half up” rule, e.g, >= 0.5 -> 1, < 0.5 -> 0,
  // so 10:10:10.999999 round 0 -> 10:10:11
  // and 10:10:10.000000 round 0 -> 10:10:10