05. december 2003 - 01:19
Der er
31 kommentarer og 1 løsning
Problem med at runde af
Hej Eksperter, Jeg henter en pris fra min database (MySQL) således double pris = rs.getDouble("vare_pris"); i databasen er prisen en decimal(10,2) Mit problem er at når jeg ganger op med antal får jeg ikke det forventede. 44*9.95 giver 437.79999999999995 i stedet for 437.8. Jeg er interesseret i at vise min pris som 0.00
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
2c
Nybegynder
05. december 2003 - 01:27
#1
Gang dit resultat med 100. Cast til integer. Divider med 100 igen. Der er dog sikkert en smartere metode :-)
05. december 2003 - 01:32
#2
Man skulle da tro at der findes en metode i JAVA som kan det
2c
Nybegynder
05. december 2003 - 01:49
#3
05. december 2003 - 02:04
#4
Det er bare en værdi jeg skal have rundet af. Jeg leder efter noget i den her stil round(55555555.5555,2);
05. december 2003 - 02:06
#5
Jeg kan finde den her Math.round(55555555.6666); men jeg vil jo gerne have 2 decimaler på
2c
Nybegynder
05. december 2003 - 02:08
#6
Jep. Jeg ved ikke lige om den metode findes i java. Round i Math bibliotektet afrunder bare til nærmeste hele tal. Det eksempel jeg linker til viser resultatet som 0.00kr. .... Double currency = new Double(9876543.21); NumberFormat currencyFormatter; String currencyOut; currencyFormatter = NumberFormat.getCurrencyInstance(currentLocale); currencyOut = currencyFormatter.format(currency); System.out.println(currencyOut + " " + currentLocale.toString());
05. december 2003 - 02:12
#7
okay, hvad skal jeg importerer
05. december 2003 - 02:17
#8
Den ved ikke hvad NumberFormat currencyFormatter; er :-(
2c
Nybegynder
05. december 2003 - 02:20
#9
import java.util.*; import java.text.*; Derudover skal du foresten også lige oprette variablen currentLocale. Locale currentLocale = new Locale("da", "");
05. december 2003 - 02:24
#10
Locale currentLocale = new Locale("da", ""); er den ikke med på, hvad betyder det i øvrigt
05. december 2003 - 02:25
#11
cannot resolve symbol symbol : class Locale location: class Tordre Locale currentLocale = new Locale("da", "");
05. december 2003 - 02:31
#12
tak for hjælpen :-)
2c
Nybegynder
05. december 2003 - 02:36
#13
Det gør at den udskriver din værdi på dansk. Havde det for eksempel været new Locale("en", ""); ville den udskrive det på engelsek. eksempel på engelsk: $9.21 på dansk: 9,21 kr.
05. december 2003 - 02:37
#14
oki
2c
Nybegynder
05. december 2003 - 02:42
#15
Jeg ved ikke hvorfor den ikke kender "Locale". Har du husket at imorterer java.util.*; ?
2c
Nybegynder
05. december 2003 - 02:45
#16
imorterer = importere
05. december 2003 - 02:45
#17
Nej det havde jeg glemt :-) OOOOoooo(måske burde man gå i seng *lol*) Kan jeg slippe for at der står kr foran.
05. december 2003 - 02:47
#18
Det er fordi værdien skal ind i en tabel, og jeg vil derfor gerne have tallene til at stå pænt under hinanden.
05. december 2003 - 02:49
#19
formattet ser således ud lige nu kr 437,80
05. december 2003 - 02:55
#20
kr 55,00 kr 5,95 kr 202,30 syntes jeg ikke ser så pænt ud :-)
2c
Nybegynder
05. december 2003 - 03:13
#21
Et grimt hack ville være: currencyOut=currencyOut.replaceFirst("kr ",""); Før du skrev ud. Ellers ved jeg ikke hvordan du skulle gøre :-(
05. december 2003 - 07:39
#22
som hovedregel: brug *ALDRIG* float og double til beløb Alternativer: database Java integer int decimal BigDecimal
05. december 2003 - 10:27
#23
Grunden til aqt jeg bruger double er at det er den eneste måde jeg kan finde ud at hente værdien fra min database. double pris = rs.getDouble("vare_pris"); Jeg er meget interesseret i se et forslag til hvordan man ellers kunne gøre
05. december 2003 - 10:32
#24
Lav felt typen til decimal eller numeric i databasen og hent med: BigDecimal pris = rs.getBigDecimal("vare_pris"); [BigDecimal er i java.math pakken]
05. december 2003 - 10:45
#25
okay, men hvorfor kan jeg nu ikke gange med en int buffer.append("<td style=\"text-align:right;\" class=\"tablecell1\">"+pris*stk+"</td>\n"); operator * cannot be applied to java.math.BigDecimal,int
05. december 2003 - 10:50
#26
Java understøtter ikke operator overload. Derfor skal du kalde metoder på BigDecimal for at lave +-*/. Og jeg skal beklage, hvis jeg har givet dig indtryk af at BigDecimal er "nem" at bruge. Men i professionel sammenhæng vil man ikke bruge double/Double til beløb. Man vil før eller siden få nogen sære afrundings fejl.
05. december 2003 - 11:08
#27
Så ser det således ud. Jeg har kigget i API'et og fundet en metode som hedder multibly, men jeg kan ikke se hvordan jeg skal bruge den BigDecimal pris = rs.getBigDecimal("vare_pris"); int stk = rs.getInt("stk");
05. december 2003 - 11:15
#28
Eksempel: import java.math.*; public class BigTest { public static void main(String[] args) { BigDecimal pris = new BigDecimal(5.25); int stk = 10; BigDecimal sum = pris.multiply(BigDecimal.valueOf(stk)); System.out.println(pris + " * " + stk + " = " + sum); } }
05. december 2003 - 11:43
#29
Hmmm. Jeg skulle jo gerne have sat pris ind, men det her er åbenbart ikke lovligt BigDecimal pris1 = new BigDecimal(pris);
05. december 2003 - 12:07
#30
Ikke forstået. BigDecimal pris = rs.getBigDecimal("vare_pris"); int stk = rs.getInt("stk"); BigDecimal sum = pris.multiply(BigDecimal.valueOf(stk));
05. december 2003 - 12:13
#31
okay så virker det.
Kurser inden for grundlæggende programmering