ฟังก์ชั่นแปลงตัวเลขเป็นคำอ่านภาษาไทย และ แปลงเป็นคำอ่านค่าเงินภาษาไทย เป็นภาษา Kotlin


import kotlin.math.roundToInt
import kotlin.math.roundToLong

private val thNumReader = arrayOf("", "หนึ่ง", "สอง", "สาม", "สี", "ห้า", "หก", "เจ็ด", "แปด", "เก้า")
private val thDigitReader = arrayOf("", "สิบ", "ร้อย", "พัน", "หมื่น", "แสน")

/**
 * ตัวอย่าง การใช้งานคำสั่ง thaiNumberReader, thaiBathReader
 */

fun main() {
    val exampleThaiNumber = arrayOf(0, 1, 10, 11, 20, 21, 30, 31, 101, 110, 220, 221, 2095, 985405421)
    val exampleThaiBath = arrayOf(0.0, 0.001, 0.25, 1.00, 10.00, 11.00, 101.53, 201.029, 9840499540.159)

    println("ทดสอบคำสั่ง thaiNumberReader")
    for(ex in exampleThaiNumber)
        println("$ex -> ${thaiNumberReader(ex.toLong())}")

    println()
    println("-------------------------------")
    println()

    println("ทดสอบคำสั่ง thaiBathReader")
    for(ex in exampleThaiBath)
        println("$ex -> ${thaiBathReader(ex.toDouble())}")
}

/**
 *  แปลงตัวเลขเป็นคำอ่านค่าเงินภาษาไทย
 *  @param numBath จำนวนเงินที่ต้องการแปลง
 *  @return คำอ่านค่าเงินเป็นภาษาไทย
 */
fun thaiBathReader(numBath: Double): String {
    return  if (((numBath % 1) * 100).roundToInt() == 0)
        thaiNumberReader((numBath / 1).toLong()) + "บาทถ้วน"
    else if (numBath < 1)
        thaiNumberReader(((numBath % 1) * 100).roundToLong()) + "สตางค์"
    else
        thaiNumberReader((numBath / 1).toLong()) + "บาท" +
                thaiNumberReader(((numBath % 1) * 100).roundToLong()) + "สตางค์"
}

/**
 *  แปลงตัวเลขเป็นคำอ่านภาษาไทย
 *  @param num ตัวเลขที่ต้องการแปลง
 *  @return คำอ่านตัวเลขเป็นภาษาไทย
 */
fun thaiNumberReader(num: Long) = thaiNumReader(num)

private fun thaiNumReader(num: Long, digit: Int = 0): String {
    var readThai: String = ""
    val numDg = (num % 10).toInt()

    if (num >= 1000000)
        readThai = thaiNumReader(num / 1000000) + "ล้าน" +
                thaiNumReader(num % 1000000, digit)
    else {
        if(num > 0) {
            readThai = thaiNumReader(num / 10, digit + 1)
            if (numDg > 0) {
                readThai += if (digit == 1) {
                    when (numDg) {
                        2 -> "ยี่สิบ"
                        1 -> "สิบ"
                        else -> thNumReader[numDg] + thDigitReader[digit]
                    }
                } else if (digit == 0) {
                    if (numDg != 1)
                        thNumReader[numDg]
                    else {
                        if (readThai != "") "เอ็ด" else "หนึ่ง"
                    }
                } else
                    thNumReader[numDg] + thDigitReader[digit]
            }
        } else if(digit == 0) readThai = "ศูนย์"
    }

    return readThai
}

หมายเลขบันทึก: 712035เขียนเมื่อ 21 มีนาคม 2023 22:40 น. ()แก้ไขเมื่อ 9 เมษายน 2023 04:32 น. ()สัญญาอนุญาต: สงวนสิทธิ์ทุกประการจำนวนที่อ่านจำนวนที่อ่าน:


ความเห็น (0)

ไม่มีความเห็น

อนุญาตให้แสดงความเห็นได้เฉพาะสมาชิก
พบปัญหาการใช้งานกรุณาแจ้ง LINE ID @gotoknow
ClassStart
ระบบจัดการการเรียนการสอนผ่านอินเทอร์เน็ต
ทั้งเว็บทั้งแอปใช้งานฟรี
ClassStart Books
โครงการหนังสือจากคลาสสตาร์ท