File Coverage

blib/lib/Lingua/ID/Number/Format/MixWithWords.pm
Criterion Covered Total %
statement 35 35 100.0
branch n/a
condition 3 7 42.8
subroutine 11 11 100.0
pod 0 1 0.0
total 49 54 90.7


line stmt bran cond sub pod time code
1             package Lingua::ID::Number::Format::MixWithWords;
2              
3             our $DATE = '2016-06-14'; # DATE
4             our $VERSION = '0.07'; # VERSION
5              
6 2     2   467 use 5.010001;
  2         5  
7 2     2   6 use strict;
  2         2  
  2         26  
8 2     2   6 use warnings;
  2         2  
  2         37  
9              
10 2     2   755 use parent qw(Lingua::Base::Number::Format::MixWithWords);
  2         482  
  2         6  
11             require Lingua::EN::Number::Format::MixWithWords;
12              
13 2     2   23910 use Math::Round qw(nearest);
  2         5  
  2         70  
14 2     2   8 use Number::Format;
  2         2  
  2         52  
15 2     2   6 use POSIX qw(floor log10);
  2         1  
  2         7  
16 2     2   1032 use Perinci::Sub::Util qw(gen_modified_sub);
  2         3268  
  2         111  
17              
18 2     2   10 use Exporter qw(import);
  2         2  
  2         414  
19             our @EXPORT_OK = qw(format_number_mix);
20              
21             our %SPEC;
22              
23             gen_modified_sub(
24             output_name => 'format_number_mix',
25             summary => 'Format number to a mixture of numbers and words (e.g. "12,3 juta")',
26             base_name => 'Lingua::EN::Number::Format::MixWithWords::format_number_mix',
27             remove_args => ['scale'],
28             output_code => sub {
29 16     16   16137 my %args = @_;
30              
31             my $f = __PACKAGE__->new(
32             num_decimal => $args{num_decimal},
33             min_format => $args{min_format},
34             min_fraction => $args{min_fraction},
35 16         73 );
36 16         58 $f->_format($args{num});
37             }
38             );
39              
40             my $id_names = {
41             #2 => 'ratus',
42             3 => 'ribu',
43             6 => 'juta',
44             9 => 'miliar',
45             12 => 'triliun',
46             15 => 'kuadriliun',
47             18 => 'kuintiliun',
48             21 => 'sekstiliun',
49             24 => 'septiliun',
50             27 => 'oktiliun',
51             30 => 'noniliun',
52             33 => 'desiliun',
53             36 => 'undesiliun',
54             39 => 'duodesiliun',
55             42 => 'tredesiliun',
56             45 => 'kuatuordesiliun',
57             48 => 'kuindesiliun',
58             51 => 'seksdesiliun',
59             54 => 'septendesiliun',
60             57 => 'oktodesiliun',
61             60 => 'novemdesiliun',
62             63 => 'vigintiliun',
63             100 => 'googol',
64             303 => 'sentiliun',
65             };
66              
67             sub new {
68 16     16 0 48 my ($class, %args) = @_;
69 16   50     63 $args{decimal_point} //= ",";
70 16   50     40 $args{thousands_sep} //= ".";
71 16   33     50 $args{names} //= $id_names;
72              
73             # XXX should use "SUPER"
74 16         60 my $self = Lingua::Base::Number::Format::MixWithWords->new(%args);
75 16         3767 bless $self, $class;
76             }
77              
78             1;
79             # ABSTRACT: Format number to a mixture of numbers and words (e.g. "12,3 juta")
80              
81             __END__