Miklix

Muunna real merkkijonoksi kaikilla desimaaliluvuilla Dynamics AX 2012:ssa

Julkaistu: 16. helmikuuta 2025 klo 10.40.31 UTC
Viimeksi päivitetty: 12. tammikuuta 2026 klo 8.50.47 UTC

Tässä artikkelissa selitän, miten liukuluku muunnetaan merkkijonoksi säilyttäen kaikki desimaalit Dynamics AX 2012:ssa, mukaan lukien X++-koodiesimerkki.


Tämä sivu on käännetty koneellisesti englannista, jotta se olisi mahdollisimman monen ihmisen saatavilla. Valitettavasti konekääntäminen ei ole vielä täydellistä tekniikkaa, joten virheitä voi esiintyä. Voit halutessasi tarkastella alkuperäistä englanninkielistä versiota täällä:

Convert a Real to String with All Decimals in Dynamics AX 2012

Tämän viestin tiedot perustuvat Dynamics AX 2012 R3 -versioon. Ne eivät välttämättä päde muihin versioihin.

Silloin tällöin minun täytyy muuntaa reaaliluku merkkijonoksi. Yleensä pelkkä sen välittäminen strFmt()-funktiolle riittää, mutta tuo funktio pyöristää aina kahteen desimaaliin, mikä ei ole aina haluttu toiminto.

Sitten on num2str()-funktio, joka toimii hyvin, mutta vaatii, että tiedät etukäteen, kuinka monta desimaalia ja merkkiä haluat.

Entä jos haluat vain muuntaa luvun merkkijonoksi, jossa on kaikki numerot ja desimaalit? Jostain syystä tämä on asia, joka saa minut aina googlaamaan, koska se on yllättävän vaikea tehdä ja teen sitä niin harvoin, etten yleensä muista tarkalleen miten - useimmissa ohjelmointikielissä oletan, että reaaliluku voidaan vain yhdistää tyhjään merkkijonoon, mutta X++ ei tue sitä.

Joka tapauksessa, ylivoimaisesti helpoin tapa, jonka olen löytänyt tämän tekemiseen, on käyttää .NET-kutsua. Tässäkin on useita vaihtoehtoja, sekä edistyneillä muotoiluasetuksilla että ilman niitä, mutta jos haluat vain todella yksinkertaisen reaaliluvun muuntamisen merkkijonoksi, tämä riittää:

stringValue = System.Convert::ToString(realValue);

Jos tämä koodi aiotaan suorittaa AOS:ssä (esimerkiksi eräajossa), muista ensin vahvistaa tarvittava koodin käyttöoikeus. Tässä tapauksessa tarvitset ClrInterop-tyyppisen InteropPermission-oikeuden .NET-koodin kutsumiseen, joten täydellinen koodiesimerkki näyttäisi suunnilleen tältä:

new InteropPermission(InteropKind::ClrInterop).assert();
stringValue = System.Convert::ToString(realValue);
CodeAccessPermission::revertAssert();

Huomaa, että tämä yksinkertainen System::Convert-funktio käyttää järjestelmän nykyistä aluekohtaista asetusta desimaalipilkun merkin suhteen. Tämä ei ehkä ole sinulle ongelma, mutta minulle, joka asun alueella, jossa desimaalierottimena käytetään pilkkua pisteen sijaan, se saattaa vaatia lisäkäsittelyä, jos merkkijonoa on esimerkiksi käytettävä tiedostossa, jonka on oltava muiden järjestelmien luettavissa.

Lisälukemista

Jos pidit tästä postauksesta, saatat pitää myös näistä ehdotuksista:


Jaa BlueskyssäJaa FacebookissaJaa LinkedInissäJaa TumblrissaJaa X:ssäJaa LinkedInissäPin Pinterestissä

Mikkel Christensen

Kirjoittajasta

Mikkel Christensen
Mikkel on miklix.com-sivuston luoja ja omistaja. Hänellä on yli 20 vuoden kokemus ammattimaisena tietokoneohjelmoijana/ohjelmistokehittäjänä, ja tällä hetkellä hän työskentelee kokopäiväisesti suuressa eurooppalaisessa IT-yrityksessä. Kun hän ei ole bloggaamassa, hän käyttää vapaa-aikaansa monenlaisiin kiinnostuksen kohteisiin, harrastuksiin ja aktiviteetteihin, mikä saattaa jossain määrin heijastua tällä verkkosivustolla käsiteltävien aiheiden moninaisuuteen.