将u8字节的向量转换为rust_decimal

2ul0zpep  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在从另一种语言加载数据。数字可以很大,它们被序列化为u8 s的字节数组。
这些都是作为一个vec的u8装载到 rust :
vec![1, 0, 0]
这个代表100,我还有一个u32代表刻度。
我试着把这个加载到一个rust_decimal中,但是卡住了。
测量值.数值-〉u8测量值.比例的向量-〉u32

let r_dec = rust_Decimal::????
wsewodh2

wsewodh21#

这是我目前为止的实现,但是感觉很不优雅!

pub fn proto_to_decimal(input: &DecimalValueProto) -> Result<Decimal, String> {
    let mut num = 0;
    let mut power: i32 = (input.value.len() - 1)
        .try_into()
        .map_err(|_| "Failed to convert proto to decimal")?; //casting down from usize to i32 is failable

    for digit in input.value.iter() {
        let expansion: i128 = if power == 0 { expansion = *digit as i128 } else { expansion = (*digit as i128) * 10_i128.pow(power as u32) as i128 }
        num += expansion;
        power -= 1;
    }
    Ok(Decimal::from_i128_with_scale(num as i128, input.scale))
}

相关问题