Miklix

Muunna real merkkijonoksi kaikilla desimaaliluvuilla Dynamics AX 2012:ssa

Julkaistu: 16. helmikuuta 2025 klo 10.40.31 UTC

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


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:een. Se voi tai ei välttämättä ole voimassa muille versioille.

Aina silloin tällöin minun on muutettava reaaliluku merkkijonoksi. Yleensä pelkkä sen välittäminen strFmt()-funktioon riittää, mutta se funktio pyöristää aina kahteen desimaaliin, mikä ei aina ole sitä, mitä haluan.

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

Entä jos haluat vain muuttaa luvun merkkijonoksi, jossa on kaikki numerot ja desimaalit? Jostain syystä tämä on jotain, joka saa minut aina googlaamaan, koska sen tekeminen on yllättävän epäselvää ja teen sitä niin harvoin, etten yleensä muista tarkalleen miten - useimmissa ohjelmointikielissä olettaisin, että voit vain ketjuttaa realin tyhjään merkkijonoon, mutta X++ ei tue sitä.

Joka tapauksessa ylivoimaisesti helpoin tapa, jonka olen löytänyt, on käyttää .NET-puhelua. Tässäkin on useita vaihtoehtoja, lisämuotoilun vaihtoehdoilla ja ilman, mutta jos haluat vain todella yksinkertaisen muuntamisen realista merkkijonoksi, tämä riittää:

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

Jos tämä koodi on tarkoitus suorittaa AOS:ssä (esimerkiksi erätyössä), muista vahvistaa ensin tarvittava koodin käyttöoikeus. Tässä tapauksessa tarvitset ClrInterop-tyypin InteropPermission-luvan .NET-koodin kutsumiseen, joten täydellinen koodiesimerkki näyttäisi 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ä aluetta desimaalipilkun suhteen. Tämä ei ehkä ole ongelma sinulle, mutta minulle, joka asun alueella, jossa desimaalierottimena käytetään pilkkua pisteen sijaan, se voi vaatia lisäkäsittelyä, jos esimerkiksi merkkijonoa on käytettävä tiedostossa, jonka on oltava muiden järjestelmien luettavissa.

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

Mikkel Bang Christensen

Kirjoittajasta

Mikkel Bang 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.