Skip to content

Commit 6bdb20c

Browse files
committed
refine integral string parsing behavior
1 parent f9f2de0 commit 6bdb20c

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

pyiceberg/expressions/literals.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import struct
2525
from abc import ABC, abstractmethod
2626
from datetime import date, datetime, time
27-
from decimal import ROUND_DOWN, ROUND_HALF_UP, Decimal
27+
from decimal import ROUND_HALF_UP, Decimal
2828
from functools import singledispatchmethod
2929
from math import isnan
3030
from typing import Any, Generic
@@ -555,7 +555,8 @@ def _(self, _: StringType) -> Literal[str]:
555555
@to.register(IntegerType)
556556
def _(self, type_var: IntegerType) -> Literal[int]:
557557
try:
558-
number = int(Decimal(self.value).to_integral_value(rounding=ROUND_DOWN))
558+
dec = Decimal(self.value)
559+
number = int(self.value) if dec.as_tuple().exponent == 0 else int(float(self.value))
559560

560561
if IntegerType.max < number:
561562
return IntAboveMax()
@@ -568,7 +569,8 @@ def _(self, type_var: IntegerType) -> Literal[int]:
568569
@to.register(LongType)
569570
def _(self, type_var: LongType) -> Literal[int]:
570571
try:
571-
long_value = int(Decimal(self.value).to_integral_value(rounding=ROUND_DOWN))
572+
dec = Decimal(self.value)
573+
long_value = int(self.value) if dec.as_tuple().exponent == 0 else int(float(self.value))
572574
if LongType.max < long_value:
573575
return LongAboveMax()
574576
elif LongType.min > long_value:

0 commit comments

Comments
 (0)