Member 13934994 Ответов: 1

Функция C# или SQL, необходимая для количества слов в тайском языке


Привет,

мне нужна функция C#, которая преобразует сумму в слова для тайского языка.

пример:
1,450,829.77 =&ГТ; หนึ่งล้านสี่แสนห้าหมื่นแปดร้อยยี่สิบเก้าบาทและเจ็ดสิบเจ็ดสตางค์
30,459.24 =&ГТ; สามหมื่นสี่ร้อยห้าสิบเก้าบาทและยี่สิบสี่สตางค์

Спасибо заранее

Что я уже пробовал:

В настоящее время я создал в базе данных SQL, но он дает какой-то неправильный вывод, его не дают в соответствии с приведенным выше примером

ALTER FUNCTION [dbo].[fnNumberToThaiWords](@Number as BIGINT)

    RETURNS NVARCHAR(1024)

AS

BEGIN

      DECLARE @Below20 TABLE (ID int identity(0,1), Word NVARCHAR(32))

      DECLARE @Below100 TABLE (ID int identity(2,1), Word NVARCHAR(32))

      INSERT @Below20 (Word) VALUES
                        ( N'ศูนย์'), (N'หนึ่ง'),(N'สอง' ), (N'สาม'),
                        ( N'สี่' ), ( N'ห้า' ), ( N'หก' ), ( N'เจ็ด' ),
                        ( N'แปด'), ( N'เก้า'), ( N'สิบ'), ( N'สิบเอ็ด' ),
                        ( N'สิบสอง' ), ( N'สิบสาม' ), ( N'สิบสี่'),
                        ( N'สิบห้า' ), (N'สิบหก' ), ( N'สิบเจ็ด'),
                        (N'สิบแปด' ), ( N'สิบเก้า' )
      
	   INSERT @Below100 VALUES (N'ยี่สิบ'), (N'สามสิบ'),(N'สี่สิบ'), (N'ห้าสิบ'),
                               (N'หกสิบ'), (N'เจ็ดสิบ'), (N'แปดสิบ'), (N'เก้าสิบ')

DECLARE @English Nvarchar(1024) =
(
  SELECT Case

    WHEN @Number = 0 THEN  ''

    WHEN @Number BETWEEN 1 AND 19
      THEN (SELECT Word FROM @Below20 WHERE ID=@Number)

   WHEN @Number BETWEEN 20 AND 99  
     THEN  (SELECT Word FROM @Below100 WHERE ID=@Number/10) + dbo.fnNumberToThaiWords( @Number % 10)

   WHEN @Number BETWEEN 100 AND 999  
     THEN  (dbo.fnNumberToThaiWords( @Number / 100))+N'ร้อย' + dbo.fnNumberToThaiWords( @Number % 100)

   WHEN @Number BETWEEN 1000 AND 999999
     THEN  (dbo.fnNumberToThaiWords( @Number / 1000))+N'พัน' + dbo.fnNumberToThaiWords( @Number % 1000) 

   WHEN @Number BETWEEN 1000000 AND 999999999  
     THEN  (dbo.fnNumberToThaiWords( @Number / 1000000))+N'ล้าน' + dbo.fnNumberToThaiWords( @Number % 1000000)

   WHEN @Number BETWEEN 1000000000 AND 999999999999  
     THEN  (dbo.fnNumberToThaiWords( @Number / 1000000000))+N'พันล้าน'+ dbo.fnNumberToThaiWords( @Number % 1000000000)

   WHEN @Number BETWEEN 1000000000000 AND 999999999999999  
     THEN  (dbo.fnNumberToThaiWords( @Number / 1000000000000))+N'ล้านล้าน'+ dbo.fnNumberToThaiWords( @Number % 1000000000000)

  --WHEN @Number BETWEEN 1000000000000000 AND 999999999999999999  

  --   THEN  (dbo.fnNumberToThaiWords( @Number / 1000000000000000))+' Quadrillion '+

  --       dbo.fnNumberToThaiWords( @Number % 1000000000000000)

  --WHEN @Number BETWEEN 1000000000000000000 AND 999999999999999999999  

  --   THEN  (dbo.fnNumberToThaiWords( @Number / 1000000000000000000))+' Quintillion '+

  --       dbo.fnNumberToThaiWords( @Number % 1000000000000000000)

        ELSE N'ข้อมูลที่ไม่ถูกต้อง' END

)



SELECT @English = RTRIM(@English)
SELECT @English = RTRIM(LEFT(@English,len(@English)-1))
                 WHERE RIGHT(@English,1)='-'
RETURN (@English)

END	

Richard MacCutchan

У вас есть код SQL, поэтому преобразование его в C# не должно быть проблемой.

Member 13934994

Привет,
это неверный код.

Richard MacCutchan

Затем выбросьте его и начните снова. Преобразование чисел в слова (на любом языке) не является сложной проблемой, и Google, скорее всего, найдет для вас несколько готовых статей по этой теме.

Member 13934994

да, каждый легко может найти сумму в словах для английского языка, но это трудно для тайского.
мы также нашли некоторую функцию и выше sql запрос также создан но клиент сказал что он дает неправильный вывод

Richard MacCutchan

Как бы трудно это ни было, в C# все равно будет проще, чем в SQL. А наличие кода внутри SQL-сервера-это действительно пустая трата ресурсов. Единственный раз, когда вам нужно преобразовать его, - это когда вы хотите показать его человеку для чтения.

1 Ответов

Рейтинг:
0

#realJSOP

Хотя вполне возможно заставить SQL server сделать это, это не подходящая платформа для работы. Извлеките данные в приложение на языке C# и переведите их туда.

FWIW, вызов функции из запроса-это лучший способ, который я знаю, чтобы значительно снизить скорость запроса. C# гораздо лучше подходит для этой задачи.


Member 13934994

Привет,
да, правильная функция c# лучше, но я так старался узнать сумму в словах функции на тайском языке.
пожалуйста, предоставьте функцию, если вы можете искать

#realJSOP

Я не говорю по-тайски, и кроме того, я совсем не знаком с числовой организацией на этом языке, поэтому я не могу вам помочь. Я написал некоторый код, который преобразует текст в его целочисленный числовой эквивалент (пример: "сто пять" преобразуется в 105). Преобразование не идет другим путем, но это должно быть незначительным усилием для заинтересованного программиста C# для реализации.

https://www.codeproject.com/Articles/875581/Converting-Text-Numbers-to-Numeric-Values