java - How to cast to integer and don't lose precision -
i have double value close 1. how can cast 1 ? this
double myvalue = 0.9999; double = math.round(myvalue); int intvalue = (int)a; but return 1 if myvalue in the range [0.5 , 1], lose precision. want return 1 if myvaluse close 1 (exp : 0.999) , should not return 1 when myvalue 0.6 example.
thank u ur help
math.round designed that. if want different, you'll have code yourself.
for instance, if want .8 , higher round 1 instead of .5 , higher (see note below negative numbers):
double myvalue = 0.9999; int base = (int)math.floor(myvalue); double remainder = myvalue - base; int intvalue = remainder >= .8 ? base + 1 : base; there, we:
- get whole number part (
math.floor) base, truncating fractional portion - get fractional portion
remainder - add 1
baseif fractional portion>=.8
obviously, you'll have choose point @ round up, since want other .5.
if want handle negative numbers, it's more complicated, since math.floor go toward positive infinity. may have branch on sign of myvalue , use math.ceil instead when negative (and adjust myvalue - base accordingly). , there's entire question of whether same kind of cutoff applies, or symmetrical? should cutoff -0.8 or -0.2? leave handling negative values in manner want exercise you...
that said, feels more complicated should be. perhaps what's described in dawood ibn kareem's comment work you're trying do. (may have + 0.3 rather - 0.3 when handling negatives. or not.)
Comments
Post a Comment