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 fra Computerworld
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