数字类型转换是所有语言中存在的一项操作。比如golang的float64转float32,用float32(v64)
即可实现,但是这个转换在v64
的值只要不超过float32的上限,就可以安全转换。但是,这在rust中似乎行不通。
我在一个实践程序里在结构体中定义了一系列的f32,i32字段,然后用parse::<f32>()
从字符串解析出f32,这一切都正常,我单独单测代码打印过这个结果,正确的读取了数字;但是当我将其进行了一系列的累加之后,转为f64再json序列化,发现居然变成了null,然后我debug打印发现,数字变成inf
了,也就是f64::INFINITY
,我类型转换过程中用的就是as f64
。
后来我索性将定义的f32改为了f64,最后它又正常了。这说明as
操作并没有想象中那么安全。