Re: Small cleanup in fn-financial.c
- From: "Andreas J. Guelzow" <aguelzow math concordia ab ca>
- To: Neil Booth <neil daikokuya demon co uk>
- Cc: gnumeric-list gnome org
- Subject: Re: Small cleanup in fn-financial.c
- Date: Mon, 14 Jan 2002 15:03:22 -0700
I believe we should wait with `cleaning up' the code until these
functions work flawlessly. Especially if we decide not to emulate all
Excel bugs should we ask ourselves whether COUPPCD should return #NUM!
when matirity == settlement. Moreover, the name gnumeric_coupcd is
misleading since all the gnumeric_ procedures should correspond to
implemented functions.
Andreas
Neil Booth wrote:
This is a trivial patch to merge common code. Also, Excel gives #NUM!
if settlement == maturity, so we should do that too. (IMO, that's
stupid for pcd, but makes sense for ncd. I think we should allow it
for pcd, but I wanted to get Excel compatibility before talking about
mini-extensions).
Neil.
2002-01-14 Neil Booth <neil daikokuya demon co uk>
* fn-financial.c (gnumeric_coupncd): Rename gnumeric_coupcd,
and take a boolean indicating whether the previous or next
coupon date is required. Give #NUM! if settlement == maturity.
(gnumeric_coupncd, gnumeric_coupcd): Update to use the
common function.
Index: functions/fn-financial.c
===================================================================
RCS file: /cvs/gnome/gnumeric/src/functions/fn-financial.c,v
retrieving revision 1.114
diff -u -p -r1.114 fn-financial.c
--- functions/fn-financial.c 2002/01/14 06:13:46 1.114
+++ functions/fn-financial.c 2002/01/14 20:48:38
@@ -2972,7 +2972,7 @@ static char *help_coupncd = {
};
static Value *
-gnumeric_coupncd (FunctionEvalInfo *ei, Value **argv)
+gnumeric_coupcd (FunctionEvalInfo *ei, Value **argv, gboolean next)
{
GDate *settlement;
GDate *maturity;
@@ -2993,12 +2993,12 @@ gnumeric_coupncd (FunctionEvalInfo *ei,
}
if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
- || g_date_compare (settlement, maturity) > 0) {
+ || g_date_compare (settlement, maturity) >= 0) {
result = value_new_error (ei->pos, gnumeric_err_NUM);
goto out;
}
- date = coup_cd (settlement, maturity, freq, oem,TRUE);
+ date = coup_cd (settlement, maturity, freq, oem, next);
result = value_new_int (datetime_g_to_serial (date));
g_date_free (date);
@@ -3009,6 +3009,12 @@ gnumeric_coupncd (FunctionEvalInfo *ei,
return result;
}
+static Value *
+gnumeric_coupncd (FunctionEvalInfo *ei, Value **argv)
+{
+ return gnumeric_coupcd (ei, argv, TRUE);
+}
+
/***************************************************************************/
static char *help_couppcd = {
@@ -3041,39 +3047,7 @@ static char *help_couppcd = {
static Value *
gnumeric_couppcd (FunctionEvalInfo *ei, Value **argv)
{
- GDate *settlement;
- GDate *maturity;
- GDate *date;
- int freq, basis;
- gboolean oem, err = FALSE;
- Value *result;
-
- settlement = datetime_value_to_g (argv[0]);
- maturity = datetime_value_to_g (argv[1]);
- freq = value_get_as_int (argv[2]);
- basis = argv[3] ? value_get_as_int (argv[3]) : 0;
- oem = argv[4] ? value_get_as_bool (argv[4], &err) : TRUE;
-
- if (!maturity || !settlement || err) {
- result = value_new_error (ei->pos, gnumeric_err_VALUE);
- goto out;
- }
-
- if (basis < 0 || basis > 4 || (freq != 1 && freq != 2 && freq != 4)
- || g_date_compare (settlement, maturity) > 0) {
- result = value_new_error (ei->pos, gnumeric_err_NUM);
- goto out;
- }
-
- date = coup_cd (settlement, maturity, freq, oem, FALSE);
- result = value_new_int (datetime_g_to_serial (date));
- g_date_free (date);
-
- out:
- g_date_free (settlement);
- g_date_free (maturity);
-
- return result;
+ return gnumeric_coupcd (ei, argv, FALSE);
}
--
Prof. Dr. Andreas J. Guelzow
Concordia University College of Alberta
aguelzow math concordia ab ca
http://www.math.concordia.ab.ca/aguelzow
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]