Jump to content

[Projekts] Utilīta - Euro summa vārdiem


HIGH-Zen
 Share

Recommended Posts

AndrisBB

Interesanta matemātika Pitonam :D

 

>>> print(356.21 - 356)
0.20999999999997954

 

Link to comment
Share on other sites

HIGH-Zen

Tāpēc naudu iesaka labāk rēķināt veselos skaitļos.

Frībeisikam ar centiem nav problēmu:

centi = Round((summa - Int(summa)) * 100)

 

Link to comment
Share on other sites

AndrisBB

Nu var jau pašā sākumā pareizināt ar 100 un tad rēķināt. Bet nu ganjau arī Pitonam ir veids kā apiet tās problēmas.

Link to comment
Share on other sites

AndrisBB

šādi mazliet labāk

 

>>> print(Decimal(356.21) - Decimal(356))
0.2099999999999795363692101091
>>> getcontext().prec = 3
>>> print(Decimal(356.21) - Decimal(356))
0.210

 

Link to comment
Share on other sites

HIGH-Zen
(labots)
pirms 16 stundām , AndrisBB teica:

Linux jau arī

Atņemam nosperto centu:

amount = 356.21
euros = int(amount)
print(euros)
cents = round((amount - euros)*100)
print(cents)

Rezultāts:
356
21

Rēķinot centus vajag round nevis int.

Labots - HIGH-Zen
Link to comment
Share on other sites

AndrisBB
Pirms 56 minūtēm , HIGH-Zen teica:

Rēķinot centus vajag round nevis int.

Drīzāk jau neviens, ne otrs variants būs tas 'pareizākais'. Bet ja darbojas, tad kapēc ne.

Link to comment
Share on other sites

HIGH-Zen
(labots)

Šodien iešāvās prātā tāda interesanta ideja, ka varētu to DLL funkciju importēt atpakaļ iekš Excel VBA, lai DLL rēķinātu summu vārdiem.

 

Kas kā izrādījās nav iespējams (forši krešoja ekselis). Un tikai tāpēc, ka DLL ir Unicode, bet VBA ir Non Unicode Program. Visual Beisiks nerubī Unicode, atšķiras String-i, DLL izmanto WChar, bet vižual beisiks Char. Arhaisms īsāk sakot. Un tas ir Microsoft Ofisā 2021.

 

Teorētiski importēt funkciju Excel-ī varētu pārtaisot DLL failu uz Non Unicode, kur piedevām Windows-ā būtu jābūt "Language for non-Unicode programs" uzstādītam latviešu valodā.

 

Edit:

Apstiprinājums.

https://www.spreadsheet1.com/how-to-display-foreign-characters-in-vbe.html#

Labots - HIGH-Zen
Link to comment
Share on other sites

HIGH-Zen

Patiesībā viss ir vēl nedaudz sarežģītāk. Pats Excel-is saprot Unicode, to nesaprot tikai VBA Editor-s.

Tātad iekš Excel VBA iekopējam kodu:

Private Declare PtrSafe Sub EuroSummaVardiem Lib "C:\skaitlivardiem.dll" (ByVal summa As Double, ByVal Atbilde As String)

Public Function SummaVardiem(summa As Double) As String
    ' Dim result_1(0 To 1024) As Byte
    Dim result_1 As String * 512
    
    Call EuroSummaVardiem(summa, result_1)
    SummaVardiem = StrConv(result_1, vbFromUnicode)
End Function

Private Sub testit()
    MsgBox (SummaVardiem(14))
End Sub

DLL tātad atrodas šeit C:\skaitlivardiem.dll

Tagad iekš Excel varam izmantot funkciju SummaVardiem.

Rezultāts:

excelresult.png.8c228108cfac4d7aaae0d7ff8bd93c44.png

 

Un šis darbojas neskatoties ne uz kādiem Regional Settings -> "Language for non-Unicode programs".

Testam tika izmantots Microsoft Office 2021 Excel, uz Windows 11 Pro.

  • Patīk 1
Link to comment
Share on other sites

Patiesībā viss ir vēl vienkāršāk. MS Word var pārvērst summas tekstā izmantojot aprēķinus laukos (field).
Te piemēra doc fails. Norādam summu, peles labais klik uz lauka ar summa vārdiem, update field (vai latvisks analogs).

 

Summa vardiem.docx

Labots - camel
Link to comment
Share on other sites

HIGH-Zen
Pirms 24 minūtēm , camel teica:

MS Word var pārvērst summas

Kātad ka var:

Untitled.png.1a52bcaf59e94f71849df90af66e6b3d.png

Untitled2.png.91a3f24db4ec87c45f734c7acbd4b1b2.png

 

Link to comment
Share on other sites

Jā, tas punkts nefurīčija. Iespējams, Camel kaut kur savādāki reģionālie iestatījumi.

Link to comment
Share on other sites

HIGH-Zen
(labots)

Pa kādai blusai jau ir:

Untitled.png.02117251f2852325ac2d352cc8fd4cf6.png

deviņisimti

piecdesmittūkstoši

 

bet kur tamlīdzīgu nav? Arī manis izmantotais kods uz ļoti retiem skaitļiem tāpat dara, nu nav jau grūti ielikt atstarpi.

Labots - HIGH-Zen
Link to comment
Share on other sites

HIGH-Zen
(labots)

Ja jau, tad jau - tagad pamēģināsim to pašu DLL izsaukt no LibreOffice Calc.
Tātad LibreOffice Calc kods ir līdzīgs:

Private Declare PtrSafe Sub EuroSummaVardiem Lib "C:\skaitlivardiem.dll" (ByVal summa As Double, ByRef Atbilde As ByteArray)

Public Function SummaVardiem(summa As Double) As String
    Dim result_1(0 To 512) As Byte
    ' Dim result_1 As String * 512
    
    Call EuroSummaVardiem(summa, result_1)

    SummaVardiem = result_1 ' StrConv(result_1, vbFromUnicode)
End Function

Private Sub testit()
    MsgBox (SummaVardiem(145.82))
End Sub

Sub Main
  MsgBox (SummaVardiem(14.51))
End Sub

DLL tātad atrodas šeit C:\skaitlivardiem.dll

 

Neaizmirstam saglabāt dokumentu.
Tagad iekš Calc varam izmantot funkciju SUMMAVARDIEM.
Rezultāts:

Untitled.png.1a88d4dca3c186bbb8625f753d924b73.png

Ja funkcija nedarbojas, tad palaižam Main makrosu:
Tools -> Macros -> Run Macro...
failanosaukums.ods -> Standard -> Module1
Macro Name -> Main
un poga Run.
Un tad var rakstīt no jauna formulu un tā darbosies.

 

Testam tika izmantots LibreOffice Calc 7.4.2.3 (x64), uz Windows 11 Pro.

Labots - HIGH-Zen
  • Patīk 2
Link to comment
Share on other sites

HIGH-Zen
(labots)

Nu un odziņa uz tortes - C programmēšanas valodā.
CodeBlocks 20.03 GCC C Win11 projekts, libskaitlivardiem.dll.a arī ir atrodams arhīvā.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

__declspec(dllimport) void __cdecl EuroSummaVardiem(double summa, wchar_t* Atbilde);

int main()
{
    wchar_t buf[256]; // UTF-16
    double summa;
    summa = 98.51;

    EuroSummaVardiem(summa, buf);
    MessageBoxW(0, buf, buf, 0);

    return 0;
}

SimpleCallDll.zip

Visual Studio 2017 Win11 jāizveido pliks C projekts ar augstāk redzamo kodu un jāpievieno bibliotēka skaitlivardiem.lib

Neaizmirstam uzlikt konfigurāciju uz Release un platformu uz x64. Viss ir notestēts un darbojas.

skaitlivardiem.lib

Visual Studio 2010 (+WinSDK7.1incl64) Win7 SP0 notestēts, darbojas.

Labots - HIGH-Zen
Notestēts uz Visual Studio 2017 un 2010
Link to comment
Share on other sites

Jurkins

Grāmatvedība nekad nav interesējusi un neko praktiski par to nezinu, kā tur ir pareizi, bet kādreiz sen atpakaļ rakstīju vba šo lietu. Neatceros, kāpēc no neta neņēma. Bet toreiz grāmatvede gribēja, lai 123 rakstītos kā "viens simts divdesmit trīs" nevis "simts divdesmit trīs" u.t.t.

Link to comment
Share on other sites

Pirms 1 minūtes , Jurkins teica:

Bet toreiz grāmatvede gribēja, lai 123 rakstītos kā "viens simts divdesmit trīs" nevis "simts divdesmit trīs"

Tā ir ķēmošanās.

Link to comment
Share on other sites

Jurkins

Varbūt.

Grāmatvedība vispār bieži vien ir ķēmošanās 😁.

  • Patīk 1
  • Haha 2
Link to comment
Share on other sites

HIGH-Zen
(labots)
Citēt

123

Citēt

Viens simts divdesmit trīs euro, 00 centi

Tā arī darbojas manis izmantotā versija.

Labots - HIGH-Zen
  • Patīk 1
Link to comment
Share on other sites

AndrisBB

Reali jau ja rakstīts kādā kompilējamā valodā, aka C/C++, tad jau tik makefailā atkarībā no platformas pamaina kompilātoram mazliet citus flagus.

clang, ccc jau iet uz visām platformām, nekas īpaši nav jāmaina.

Link to comment
Share on other sites

HIGH-Zen

Principā jau tā ir, FreeBasic iet uz Linux, FreePascal arī. Bet domāju, ka pieprasījums uz Linux būtu tiešām mazs. Tiem retajiem gadījumiem tad noderētu WINE.

Link to comment
Share on other sites

HIGH-Zen
pirms 10 stundām , AndrisBB teica:

Reali jau ja rakstīts kādā kompilējamā valodā, aka C/C++

Nu FreeBasic konvertē kodu uz C un tad ar GCC nokompilē to. Tā ka var uzskatīt, ka DLL fails ir rakstīts C. :)

Link to comment
Share on other sites

HIGH-Zen

Notestēju uz Linux Mint 21.1 Vera 64-bit MATE 1.26.0.

Ar PlayOnLinux WINE 64-bitu versiju neizdevās uzlikt, bet WINE 32-bitu versija ļāva mierīgi uzlikt un darbojas ne sliktāk kā natīvā programma.

Spoiler

33937177_Screenshotat2023-05-2616-15-21.thumb.png.b70a3637c4b75aa7e29dd7d355e29cbc.png

Tātad ja kādam vajadzīga programmas 32-bitu versija - PM.

Manas domas ir, ka nepieteiksies neviens linuksoīds, bet nu kas zina. :)

Papildus varu dot instrukcijas kā uzstādīt skaitlivardiem ar PlayOnLinux palīdzību.

Link to comment
Share on other sites

AndrisBB

Grūti iedomāties, kam to programmu vajadzētu kā programmu, ja nu vienīgi paspēlēties. Pa to laiku kamēr atver, ieraksti summu utt, tikmēr jau pats vārdiem uzrakstījis kur vajag (ja nav miljonu lieli skaitļi).

Citu runa ka ja vajag dokumentus automātiski kvantumos apstrādāt (bet tad arī to applikāciju neizmantosi), kauvai tanī pašā Librē aizpildīt lauku, kur summa vārdiem, ja updeito kādu no ailēm.

 

Droši vien vislielākā jēga no tā .dll/.so/.dylib būtu ja palaid instalāciju, viņš automātiski installē bibliotēku, pievieno Librei/Ekselim un jūzerim vienīgā lieta kas ir jāizdara ir jāieraksta ailē =SUMMA_VĀRDIEM(B6). Es ez kautko tādu fokusētos, tad ganjau arī kāds lejupielādētu.

 

Link to comment
Share on other sites

HIGH-Zen
Pirms 21 minūtēm , AndrisBB teica:

Grūti iedomāties, kam to programmu vajadzētu kā programmu

Grāmatvežiem, kam tad vēl. Ir pat online tooļi. Kāds taču tos izmanto. Ver vaļā browseri, iet uz weblapu, raksta kaut ko iekšā, spiež pogu aprēķināt, kopē rezultātu. Neko diži ātri jau nav. Un ja nu tas jādara vairākkārtīgi. Šādā gadījumā programma uzvar.
Kalkulatorus taču arī ir kas izmanto, nevis visu rēķina uz papīra.

 

Link to comment
Share on other sites

AndrisBB

Nu tapēc es saku, ka ja viegli integrēt Ekselī, tad arī grāmatvedim būs vieglāk izmantot tur, nekā atsevišķu programmu.

Iekopē kollonu ar summām vienā piegājienā, ja vajag daudz. 

Link to comment
Share on other sites

HIGH-Zen

Un ja nu tas vajadzīgs Word-ā vai vēl sazin kur. Tu domā, ka zini grāmatvežu use cases. Esmu redzējis, ka sēžot pie Excel tabulas kaut kādas summas grāmatvede pārrēķina vēlreiz ar fizisku kalkulatoru, kas cilvēkiem no citām aprindām liekas nonsenss.

Link to comment
Share on other sites

AndrisBB

Wordā nevar lietot funkcijas?

Tjip labais klikšķis uz cipariem -> pārvērt summā vārdiem?

Zin kā, uz Maka cilvēki reizēm gatavi maksāt piecus bakšus par relatīvi vienkāršām lietām, kas padara dzīvi vienkāršāku.

Worda tabulās jau izskatās var lietot tās pašas Excel formulas, aka =SUM utt

Link to comment
Share on other sites

HIGH-Zen
(labots)

Wordā tādus brīnumus neesmu redzējis, izņemot jau iepriekš sagatavotos laukos kā @camel piemērā. Bet tur bija savas neprecizitātes - jābūt Viens simts divdesmit trīs euro, 00 centi nevis simts divdesmit trīs.

Šis pasākums ir bez maksas. :)

Patīk ņemam, nepatīk neņemam. Bakši paliek makā jebkurā gadījumā.

Labots - HIGH-Zen
Link to comment
Share on other sites

HIGH-Zen
26.05.2023. , 16:39, AndrisBB teica:

Droši vien vislielākā jēga no tā .dll/.so/.dylib būtu ja palaid instalāciju, viņš automātiski installē bibliotēku, pievieno Librei/Ekselim un jūzerim vienīgā lieta kas ir jāizdara ir jāieraksta ailē =SUMMA_VĀRDIEM(B6). Es ez kautko tādu fokusētos...

Update!

Pievienoju pirmajā postā Excel bibliotēku ar visu instalāciju. Tagad var darboties izmantojot Excel Add In-u. Izmantojot formulu, piemēram =SUME(A1)

Programmēšanas valoda C++. :)

  • Patīk 1
Link to comment
Share on other sites

Ar ko tava excel bibliotēka būs labāka par to manu excel failu?

Ja tabulā izmanto funkciju no tas bibliotēkas, tad failam līdzi jāsūta arī tavs dll?

Tak pilnīgi pietiktu kautvai ar VBA funkciju, nav nekādi freebasici utt. vajadzīgi.

Link to comment
Share on other sites

HIGH-Zen
Pirms 29 minūtēm , camel teica:

Ar ko tava excel bibliotēka būs labāka par to manu excel failu?

Ja xlsx fails ar formulām tiks izmantots arī uz cita datora, tad jādod līdzi Excel bibliotēkas instalācija vai interneta links kur ielādēt.
Excel bibliotēkas instalācija ir vienkārša un ērta.
Labāks ir tas, ka formulu var ierakstīt jebkurā ailē un nav nekādu slēpto rindu.
Varbūt mazsvarīgāk, bet aprēķins notiek ātri, jo tiek darbināts C++ kods nevis makross.

 

Nav arī tādu pārrakstīšanās kļūdu, kā piemēram:

Citēt

123357,12
Viens simts divdesmit trīs tukstoši trīs simti piecdesmit septiņi eiro 12 c.

 

Link to comment
Share on other sites

Jēziņ, tu tik stum savu, it kā nesaprastu.

 

Bet paldies par norādi uz kļūdu, labošana ir viegli pieejama, jebkuršs var pats izdarīt.

Šeit salabota versija:

eiro vārdiem.xlsx

Link to comment
Share on other sites

AndrisBB

Pluss varētu būt ka darbojas arī iekš Numbers vai Google doks.

Tik laikam tad labāk to formulu likt citā šītā.

 

 

Screenshot 2023-05-29 at 14.01.03.png

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...