Fix power calculation when encoding the BigDecimal into NUMERIC (#1692)

* Show failing test

0.002 will be encoded as 0.02

* The power calculation should depend on the offset

of the digits
This commit is contained in:
VersBinarii 2022-02-11 21:28:07 +01:00 committed by GitHub
parent f3ac717977
commit fd2d26e12d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 1 deletions

View file

@ -115,7 +115,7 @@ impl TryFrom<&'_ BigDecimal> for PgNumeric {
digits.push(base_10_to_10000(first));
}
} else if offset != 0 {
digits.push(base_10_to_10000(&base_10) * 10i16.pow(3 - base_10.len() as u32));
digits.push(base_10_to_10000(&base_10) * 10i16.pow((offset - base_10.len()) as u32));
}
if let Some(rest) = base_10.get(offset..) {

View file

@ -421,6 +421,12 @@ test_type!(bigdecimal<sqlx::types::BigDecimal>(Postgres,
"0.01234567::numeric" == "0.01234567".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.012345678::numeric" == "0.012345678".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.0123456789::numeric" == "0.0123456789".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.002::numeric" == "0.002".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.0002::numeric" == "0.0002".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.00002::numeric" == "0.00002".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.000002::numeric" == "0.000002".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.0000002::numeric" == "0.0000002".parse::<sqlx::types::BigDecimal>().unwrap(),
"0.00000002::numeric" == "0.00000002".parse::<sqlx::types::BigDecimal>().unwrap(),
"12.34::numeric" == "12.34".parse::<sqlx::types::BigDecimal>().unwrap(),
"12345.6789::numeric" == "12345.6789".parse::<sqlx::types::BigDecimal>().unwrap(),
));