id	summary	reporter	owner	description	type	status	priority	component	severity	resolution	keywords	cc
30	Timestamp support has floating-point roundoff	edemaine@…	xi	"Example:

{{{
>>> import yaml, datetime
>>> yaml.dump(datetime.datetime(2005, 7, 8, 17, 35, 4, 517600))
'2005-07-08 17:35:04.517600\n'
>>> yaml.load(_)
datetime.datetime(2005, 7, 8, 17, 35, 4, 517599)
}}}

This breaks the desired rule that yaml.load(yaml.dump(x)) == x in a case where there should be no roundoff.  (datetime.datetime uses integers everywhere to avoid any error.)

The offending code seems to be line 321 in {{{yaml/constructor.py}}}:

{{{
fraction = int(float(values['fraction'])*1000000)
}}}

This seems to be an ""easy"" way to convert the trailing '.517600' into an integer, but it can go beyond floating-point precision.  Wouldn't the following work?

{{{
fraction = int(values['fraction'][:6].ljust(6, '0'))
}}}"	defect	closed	normal	pyyaml	normal	fixed		
