summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <ramil@mysql.com>2005-11-29 18:06:58 +0400
committerunknown <ramil@mysql.com>2005-11-29 18:06:58 +0400
commitec26c1e98596e5c84d2d2deb3abf76b1a02341b8 (patch)
tree23c0dfc09e0062efed62db97e74b6c9eb564addd
parenta4008fd635c0785b99d3118d4367ad1be28db2e1 (diff)
downloadmariadb-git-ec26c1e98596e5c84d2d2deb3abf76b1a02341b8.tar.gz
Addition to fix for bug #12956: cast make differ rounding.
- use rint() in some other val_int() methods as well.
-rw-r--r--sql/field.cc4
-rw-r--r--sql/item.h4
2 files changed, 4 insertions, 4 deletions
diff --git a/sql/field.cc b/sql/field.cc
index b70e2a92618..6de2a731030 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -3953,7 +3953,7 @@ longlong Field_float::val_int(void)
else
#endif
memcpy_fixed((byte*) &j,ptr,sizeof(j));
- return ((longlong) j);
+ return (longlong) rint(j);
}
@@ -4241,7 +4241,7 @@ longlong Field_double::val_int(void)
else
#endif
doubleget(j,ptr);
- return ((longlong) j);
+ return (longlong) rint(j);
}
diff --git a/sql/item.h b/sql/item.h
index 3c03cd23e2c..718b995bc5a 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -159,7 +159,7 @@ struct Hybrid_type_traits
{ val->real/= ulonglong2double(u); }
virtual longlong val_int(Hybrid_type *val, bool unsigned_flag) const
- { return (longlong) val->real; }
+ { return (longlong) rint(val->real); }
virtual double val_real(Hybrid_type *val) const { return val->real; }
virtual my_decimal *val_decimal(Hybrid_type *val, my_decimal *buf) const;
virtual String *val_str(Hybrid_type *val, String *buf, uint8 decimals) const;
@@ -1341,7 +1341,7 @@ public:
{
return LONGLONG_MAX;
}
- return (longlong) (value+(value > 0 ? 0.5 : -0.5));
+ return (longlong) rint(value);
}
String *val_str(String*);
my_decimal *val_decimal(my_decimal *);