summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorKenta Murata <mrkn@mrkn.jp>2021-12-02 17:06:52 +0900
committerKenta Murata <mrkn@mrkn.jp>2021-12-24 02:28:59 +0900
commit84ae7a5df9aac2dce406e88ece04e839073b461b (patch)
tree1702b9cb6cd1664944e72a1cb63e1bbf59fa024e /ext
parentea713009ba72a2bfd6929145df40386cf59de2d7 (diff)
[ruby/bigdecimal] Add BigDecimal#precision_scale
https://github.com/ruby/bigdecimal/commit/c019caeaba
Diffstat (limited to 'ext')
-rw-r--r--ext/bigdecimal/bigdecimal.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
index 70e1bf7e7e..47b10d6a49 100644
--- a/ext/bigdecimal/bigdecimal.c
+++ b/ext/bigdecimal/bigdecimal.c
@@ -483,6 +483,24 @@ BigDecimal_scale(VALUE self)
/*
* call-seq:
+ * precision_scale -> [integer, integer]
+ *
+ * Returns a 2-length array; the first item is the result of
+ * BigDecimal#precision and the second one is of BigDecimal#scale.
+ *
+ * See BigDecimal#precision.
+ * See BigDecimal#scale.
+ */
+static VALUE
+BigDecimal_precision_scale(VALUE self)
+{
+ ssize_t precision, scale;
+ BigDecimal_count_precision_and_scale(self, &precision, &scale);
+ return rb_assoc_new(SSIZET2NUM(precision), SSIZET2NUM(scale));
+}
+
+/*
+ * call-seq:
* n_significant_digits -> integer
*
* Returns the number of decimal significant digits in +self+.
@@ -4228,6 +4246,7 @@ Init_bigdecimal(void)
rb_define_method(rb_cBigDecimal, "precs", BigDecimal_prec, 0);
rb_define_method(rb_cBigDecimal, "precision", BigDecimal_precision, 0);
rb_define_method(rb_cBigDecimal, "scale", BigDecimal_scale, 0);
+ rb_define_method(rb_cBigDecimal, "precision_scale", BigDecimal_precision_scale, 0);
rb_define_method(rb_cBigDecimal, "n_significant_digits", BigDecimal_n_significant_digits, 0);
rb_define_method(rb_cBigDecimal, "add", BigDecimal_add2, 2);