body {
font-family: "Microsoft YaHei", Arial, sans-serif;
//max-width: 600px;
margin: 0 auto;
padding: 20px;
background-color: #f9f9f9;
color: #333;
}
h1 {
color: #e74c3c;
text-align: center;
margin-bottom: 30px;
}
.converter {
background-color: white;
border-radius: 8px;
padding: 25px;
box-shadow: 0 2px 15px rgba(0, 0, 0, 0.1);
}
.input-group {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
color: #2c3e50;
}
input {
width: 100%;
padding: 12px;
border: 1px solid #ddd;
border-radius: 4px;
box-sizing: border-box;
font-size: 16px;
}
input:focus {
border-color: #3498db;
outline: none;
}
.button-group {
display: flex;
gap: 10px;
margin-bottom: 20px;
}
button {
background-color: #3498db;
color: white;
border: none;
padding: 12px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
font-weight: bold;
transition: background-color 0.3s;
flex: 1;
}
button:hover {
background-color: #2980b9;
}
button.secondary {
background-color: #95a5a6;
}
button.secondary:hover {
background-color: #7f8c8d;
}
.result {
margin-top: 25px;
padding: 20px;
background-color: #f8f9fa;
border-radius: 4px;
border-left: 4px solid #3498db;
position: relative;
}
.result.show {
display: block;
}
.result-title {
color: #2c3e50;
margin-top: 0;
margin-bottom: 10px;
}
.result-content {
font-size: 18px;
color: #e74c3c;
font-weight: bold;
word-wrap: break-word;
margin-bottom: 15px;
}
.copy-btn {
background-color: #2ecc71;
padding: 8px 15px;
font-size: 14px;
}
.copy-btn:hover {
background-color: #27ae60;
}
.copy-feedback {
position: absolute;
right: 20px;
top: 20px;
background-color: #2ecc71;
color: white;
padding: 5px 10px;
border-radius: 4px;
font-size: 14px;
opacity: 0;
transition: opacity 0.3s;
}
.copy-feedback.show {
opacity: 1;
}
.error {
color: #e74c3c;
font-size: 14px;
margin-top: 5px;
display: none;
}
.example {
margin-top: 20px;
padding: 15px;
background-color: #f0f4f8;
border-radius: 4px;
font-size: 14px;
}
.example h4 {
margin-top: 0;
color: #2c3e50;
}
Конвертер суммы прописью
Введите сумму цифрами:
Преобразовать в прописную сумму Очистить
Сумма прописью:
Копировать результат
Скопировано!
Инструкция по использованию:
1. Введите числовую сумму (поддерживаются целые и десятичные числа, максимум два знака после запятой)
2. Максимальная поддержка до уровня сотен миллиардов
3. Пример: 1234.56 → 壹仟贰佰叁拾肆元伍角陆分
document.getElementById('convert').addEventListener('click', convertAmount);
document.getElementById('clear').addEventListener('click', clearAll);
document.getElementById('copy-btn').addEventListener('click', copyResult);
// Добавить срабатывание преобразования по нажатию Enter
document.getElementById('amount').addEventListener('keypress', function(e) {
if (e.key === 'Enter') {
convertAmount();
}
});
function convertAmount() {
const amountInput = document.getElementById('amount').value.trim();
const errorElement = document.getElementById('amount-error');
const resultElement = document.getElementById('result');
const resultContent = document.getElementById('result-content');
// Сбросить состояние
errorElement.style.display = 'none';
resultElement.classList.remove('show');
// Проверить ввод
if (!amountInput) {
showError('Введите сумму');
return;
}
// Проверить, является ли допустимым числом
if (!/^\d+(\.\d{1,2})?$/.test(amountInput)) {
showError('Введите допустимый формат суммы (например: 1234.56)');
return;
}
// Преобразовать в число
const amount = parseFloat(amountInput);
// Проверить диапазон
if (amount >= 1000000000000) {
showError('Сумма слишком велика, максимальная поддержка до уровня сотен миллиардов');
return;
}
if (amount < 0) {
showError('Сумма не может быть отрицательной');
return;
}
// Преобразовать в прописную сумму
const upperAmount = convertToUpper(amount);
resultContent.textContent = upperAmount;
resultElement.classList.add('show');
}
function clearAll() {
document.getElementById('amount').value = '';
document.getElementById('amount-error').style.display = 'none';
document.getElementById('result').classList.remove('show');
}
function copyResult() {
const resultContent = document.getElementById('result-content');
if (resultContent.textContent) {
// Создать временный элемент textarea для копирования текста
const textarea = document.createElement('textarea');
textarea.value = resultContent.textContent;
document.body.appendChild(textarea);
textarea.select();
try {
// Выполнить команду копирования
const successful = document.execCommand('copy');
if (successful) {
showCopyFeedback();
}
} catch (err) {
// Если метод execCommand недоступен, использовать современный Clipboard API
navigator.clipboard.writeText(resultContent.textContent)
.then(() => showCopyFeedback())
.catch(err => console.error('Ошибка копирования:', err));
}
document.body.removeChild(textarea);
}
}
function showCopyFeedback() {
const feedback = document.getElementById('copy-feedback');
feedback.classList.add('show');
setTimeout(() => {
feedback.classList.remove('show');
}, 2000);
}
function showError(message) {
const errorElement = document.getElementById('amount-error');
errorElement.textContent = message;
errorElement.style.display = 'block';
}
function convertToUpper(n) {
// Сопоставление цифровых символов с китайскими прописными
const digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
const units = ['', '拾', '佰', '仟'];
const bigUnits = ['', '万', '亿'];
// Обработать десятичную часть
let integerPart = Math.floor(n);
let decimalPart = Math.round((n - integerPart) * 100);
// Обработать целую часть
let result = '';
if (integerPart > 0) {
let integerStr = integerPart.toString();
let zeroCount = 0;
// Групповая обработка, по 4 цифры в группе
for (let i = 0; i < integerStr.length; i++) {
const pos = integerStr.length - 1 - i;
const digit = parseInt(integerStr[pos]);
const unitPos = i % 4;
const groupPos = Math.floor(i / 4);
if (digit === 0) {
zeroCount++;
} else {
if (zeroCount > 0) {
result = digits[0] + result;
zeroCount = 0;
}
result = digits[digit] + units[unitPos] + result;
}
// Добавить большие единицы (万, 亿) в конце каждой группы
if (unitPos === 0 && zeroCount < 4) {
result = bigUnits[groupPos] + result;
}
}
result += '元';
} else {
result = '零元';
}
// Обработать десятичную часть
if (decimalPart > 0) {
const jiao = Math.floor(decimalPart / 10);
const fen = decimalPart % 10;
if (jiao > 0) {
result += digits[jiao] + '角';
}
if (fen > 0) {
result += digits[fen] + '分';
}
} else if (decimalPart === 0 && integerPart > 0) {
result += '整';
} else {
result = '零元整';
}
// Обработка особых случаев
result = result.replace(/零元/, '元');
result = result.replace(/零[拾佰仟]+/, '零');
result = result.replace(/零{2,}/g, '零');
result = result.replace(/零(万|亿)/g, '$1');
result = result.replace(/亿万/, '亿');
result = result.replace(/元零角/, '元');
return result;
}