Skip to content

Commit 4c8c2fe

Browse files
committed
fix i256
1 parent 05b9e6b commit 4c8c2fe

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/functions/scalar.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ use std::borrow::Cow;
1919
use crate::core::JsonbItem;
2020
use crate::core::JsonbItemType;
2121
use crate::error::*;
22-
use crate::ExtensionValue;
2322
use crate::extension::Date;
2423
use crate::extension::Interval;
2524
use crate::extension::Timestamp;
2625
use crate::number::Decimal128;
2726
use crate::number::Decimal256;
2827
use crate::number::Number;
28+
use crate::ExtensionValue;
2929
use crate::RawJsonb;
3030

3131
impl RawJsonb<'_> {

src/number.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,9 @@ pub struct Decimal256 {
5353

5454
impl Decimal256 {
5555
pub fn to_float64(&self) -> f64 {
56-
let div = 10_f64.powi(self.scale as i32);
57-
self.value.as_f64() / div
56+
let _div = 10_f64.powi(self.scale as i32);
57+
//self.value.to_f64().unwrap() / div
58+
todo!()
5859
}
5960
}
6061

@@ -196,9 +197,13 @@ impl Number {
196197
Ok(Number::Decimal128(neg_dec))
197198
}
198199
Number::Decimal256(v) => {
200+
let (neg_value, is_overflow) = v.value.overflowing_neg();
201+
if is_overflow {
202+
return Err(Error::Message("Decimal256 overflow".to_string()));
203+
}
199204
let neg_dec = Decimal256 {
200205
scale: v.scale,
201-
value: v.value * -1,
206+
value: neg_value,
202207
};
203208
Ok(Number::Decimal256(neg_dec))
204209
}
@@ -521,7 +526,7 @@ impl Display for Number {
521526
} else {
522527
let pow_scale = i256::from(10).pow(v.scale as u32);
523528
// -1/10 = 0
524-
if v.value >= 0 {
529+
if v.value >= i256::from(0) {
525530
write!(
526531
f,
527532
"{}.{:0>width$}",

0 commit comments

Comments
 (0)