小数转为角分
export default {
methods: {
numberToChinese(num) {
if (typeof num !== 'number' || isNaN(num)) {
return '输入的不是一个有效的数字';
}
const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const units = ['', '十', '百', '千'];
const bigUnits = ['', '万', '亿', '兆'];
const decimalUnits = ['角', '分']; // 小数部分的单位
// 处理整数部分
let integerPart = Math.floor(num); // 整数部分
let decimalPart = num - integerPart; // 小数部分
let str = '';
let zeroFlag = false;
let unitIndex = 0;
let bigUnitIndex = 0;
while (integerPart > 0) {
const digit = integerPart % 10;
if (digit === 0) {
if (!zeroFlag) {
str = chineseNums[digit] + str;
zeroFlag = true;
}
} else {
str = chineseNums[digit] + units[unitIndex] + str;
zeroFlag = false;
}
integerPart = Math.floor(integerPart / 10);
unitIndex++;
if (unitIndex === units.length && integerPart > 0) {
unitIndex = 0;
bigUnitIndex++;
if (bigUnitIndex < bigUnits.length) {
str = bigUnits[bigUnitIndex] + str;
}
}
}
// 处理小数部分
if (decimalPart > 0) {
str += '点'; // 添加“点”作为小数点的中文表示
decimalPart *= 100; // 转换为百分位
let decimalStr = '';
for (let i = 0; i < decimalUnits.length; i++) {
const digit = Math.floor(decimalPart % 10);
if (digit !== 0) {
decimalStr = chineseNums[digit] + decimalUnits[i] + decimalStr;
}
decimalPart = Math.floor(decimalPart / 10);
if (decimalPart === 0) {
break;
}
}
str += decimalStr;
}
// 如果整个数字为0,则直接返回“零”
if (str === '') {
return '零';
}
return str;
}
}
}
输出:一百二十三点四五
在Vue中将带有小数的数字转化为中文,但小数部分不带单位(例如:不转换为“角”、“分”等),我们可以仅将小数部分作为普通数字处理,不进行单位转换
export default {
methods: {
numberToChinese(num) {
if (typeof num !== 'number' || isNaN(num)) {
return '输入的不是一个有效的数字';
}
const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const units = ['', '十', '百', '千'];
const bigUnits = ['', '万', '亿', '兆'];
// 处理整数部分
let integerPart = Math.trunc(num); // 整数部分
let decimalPart = num - integerPart; // 小数部分
let str = '';
let zeroFlag = false;
let unitIndex = 0;
let bigUnitIndex = 0;
while (integerPart > 0) {
const digit = integerPart % 10;
if (digit === 0) {
if (!zeroFlag) {
str = chineseNums[digit] + str;
zeroFlag = true;
}
} else {
str = chineseNums[digit] + units[unitIndex] + str;
zeroFlag = false;
}
integerPart = Math.trunc(integerPart / 10);
unitIndex++;
if (unitIndex === units.length && integerPart > 0) {
unitIndex = 0;
bigUnitIndex++;
str = bigUnits[bigUnitIndex] + str;
}
}
// 处理小数部分
if (decimalPart > 0) {
str += '点'; // 添加“点”作为小数点的中文表示
decimalPart *= 100; // 假设处理到小数点后两位
let decimalStr = '';
let decimalUnitIndex = 0;
while (decimalPart > 0 && decimalUnitIndex < 2) { // 假设只处理到小数点后两位
const digit = Math.trunc(decimalPart % 10);
if (digit !== 0) {
decimalStr = chineseNums[digit] + decimalStr;
}
decimalPart = Math.trunc(decimalPart / 10);
decimalUnitIndex++;
}
str += decimalStr;
}
// 如果整个数字为0,则直接返回“零”
if (str === '') {
return '零';
}
return str;
}
}
}
日常
提示:当前创作和你的工作、学习是什么样的关系
例如:
- 创作是否已经是你生活的一部分了
- 有限的精力下,如何平衡创作和工作学习
- …
0-9999的转化
在Vue中,你可以创建一个方法来将数字转换为中文表示。这通常涉及到对数字的每个位进行遍历,并根据位数将其转换为对应的中文表示。
以下是一个简单的例子,将0-9999之间的数字转换为中文
export default {
methods: {
numberToChinese(num) {
const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const units = ['', '十', '百', '千'];
if (num === 0) return chineseNums[0];
let str = '';
let zeroFlag = false; // 用于标记是否出现过0
for (let i = 0; i < 4; i++) {
const digit = Math.floor((num / Math.pow(10, i)) % 10;
if (digit === 0) {
if (!zeroFlag) {
str = chineseNums[digit] + str;
zeroFlag = true;
}
} else {
str = chineseNums[digit] + units[i] + str;
zeroFlag = false;
}
}
return str;
}
}
}
保留三位小数
28.155 输出:二十八点一五五
numberToChinese(num) {
if (typeof num !== 'number' || isNaN(num)) {
return '输入的不是一个有效的数字';
}
const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const units = ['', '十', '百', '千'];
const bigUnits = ['', '万', '亿', '兆'];
// 处理整数部分
let integerPart = Math.trunc(num);
let decimalPart = (num - integerPart).toFixed(3).slice(2); // 保留三位小数,并去掉整数部分
let str = '';
let zeroFlag = false;
let unitIndex = 0;
let bigUnitIndex = 0;
while (integerPart > 0) {
const digit = integerPart % 10;
if (digit === 0) {
if (!zeroFlag) {
str = chineseNums[digit] + str;
zeroFlag = true;
}
} else {
str = chineseNums[digit] + units[unitIndex] + str;
zeroFlag = false;
}
integerPart = Math.trunc(integerPart / 10);
unitIndex++;
if (unitIndex === units.length && integerPart > 0) {
unitIndex = 0;
bigUnitIndex++;
str = bigUnits[bigUnitIndex] + str;
}
}
// 处理小数部分
if (decimalPart !== '000') {
str += '点'; // 添加“点”作为小数点的中文表示
for (let i = 0; i < decimalPart.length; i++) {
const digit = parseInt(decimalPart[i]);
if (digit !== 0) {
str += chineseNums[digit];
}
}
}
// 如果整个数字为0,则直接返回“零”
if (str === '') {
return '零';
}
return str;
},