toPersianWords method
String
toPersianWords(
[ - dynamic ordinal = false
])
Implementation
String toPersianWords([ordinal = false]) {
final _this = this;
if (_this == null) return 'NaN';
if (this == 0) return 'صفر';
if (ordinal && _this.isNegative) throw 'Ordinal can\'t be negative';
var result = _this.isNegative ? 'منفی ' : '';
final number = _this.abs();
if (number.toString().length <= 3) {
var d12 = number % 100;
var d3 = (number / 100).floor();
if (d3 != 0) {
result += persianNumHundreds[d3] + ' و ';
}
if ((d12 >= 10) && (d12 <= 19)) {
result += persianNumTen_Twenty[d12 - 10];
} else {
var d2 = (d12 / 10).floor();
if (d2 != 0) {
result += persianNumDecimal[d2] + ' و ';
}
var d1 = d12 % 10;
if (d1 != 0) {
result += persianNumUnit[d1] + ' و ';
}
result = result.substring(0, result.length - 3);
}
} else {
var padLen;
switch (number.toString().length % 3) {
case 1:
padLen = 2;
break;
case 2:
padLen = 1;
break;
default:
padLen = 0;
}
var numStr = number
.toString()
.padLeft(number.toString().length + padLen as int, '0');
final L = (numStr.length / 3 - 1).floor();
int b;
var threeZero = false;
for (var i = 0; i <= L; i++) {
b = int.parse(numStr.substring(i * 3, (i + 1) * 3));
if (b != 0) {
result += b.toPersianWords() + ' ' + persianNumBase[L - i] + ' و ';
threeZero = false;
} else if (b == 0 && i > 0) {
threeZero = true;
}
}
result = result.substring(
0,
threeZero ? result.length - 3 : result.length - 4,
);
}
result = result.trim();
if (!ordinal) {
return result;
} else {
if (this == 1) {
return 'اول';
} else if (result.substring(result.length - 2, result.length) == 'سه') {
return result.substring(0, result.length - 1) + 'وم';
} else if (result.substring(result.length - 2, result.length) == 'سی') {
return result + 'ام';
} else {
return result + 'م';
}
}
}