提交 8e706db2 编写于 作者: T Tom Musta 提交者: Alexander Graf

libdecnumber: Introduce decNumberFrom[U]Int64

Introduce two conversion functions to the libdecnumber library.
These conversions transform 64 bit integers to the internal decNumber
representation.  Both a signed and unsigned version is added.
Signed-off-by: NTom Musta <tommusta@gmail.com>
Signed-off-by: NAlexander Graf <agraf@suse.de>
上级 e58f8d1f
......@@ -115,6 +115,8 @@
/* Conversions */
decNumber * decNumberFromInt32(decNumber *, int32_t);
decNumber * decNumberFromUInt32(decNumber *, uint32_t);
decNumber *decNumberFromInt64(decNumber *, int64_t);
decNumber *decNumberFromUInt64(decNumber *, uint64_t);
decNumber * decNumberFromString(decNumber *, const char *, decContext *);
char * decNumberToString(const decNumber *, char *);
char * decNumberToEngString(const decNumber *, char *);
......
......@@ -436,6 +436,36 @@ uInt decNumberToUInt32(const decNumber *dn, decContext *set) {
return 0;
} /* decNumberToUInt32 */
decNumber *decNumberFromInt64(decNumber *dn, int64_t in)
{
uint64_t unsig = in;
if (in < 0) {
unsig = -unsig;
}
decNumberFromUInt64(dn, unsig);
if (in < 0) {
dn->bits = DECNEG; /* sign needed */
}
return dn;
} /* decNumberFromInt64 */
decNumber *decNumberFromUInt64(decNumber *dn, uint64_t uin)
{
Unit *up; /* work pointer */
decNumberZero(dn); /* clean */
if (uin == 0) {
return dn; /* [or decGetDigits bad call] */
}
for (up = dn->lsu; uin > 0; up++) {
*up = (Unit)(uin % (DECDPUNMAX + 1));
uin = uin / (DECDPUNMAX + 1);
}
dn->digits = decGetDigits(dn->lsu, up-dn->lsu);
return dn;
} /* decNumberFromUInt64 */
/* ------------------------------------------------------------------ */
/* to-scientific-string -- conversion to numeric string */
/* to-engineering-string -- conversion to numeric string */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册