- Posts: 12940
- Thank you received: 3979
Welcome to the LimeSurvey Community Forum
Ask the community, share ideas, and connect with other LimeSurvey users!
WTP abfragen
- Joffm
- Offline
- LimeSurvey Community Team
Komm, hör auf.Das schlimme dort ist, dass Microsoft meint es wäre eine gute Idee die Formeln zu "übersetzen".
Ich habe mich gerade darüber ausgelassen, dass Microsoft immer besser zu wissen glaubt, was ich will.
Ich hasse das.
Deine Korrektur hat sich dann mit meinem Post gekreuzt.
@Lena
Ja, kannst Du natürlich immer. Aber sage es vorher. Ich schaue in diese Privaten Nachrichten nicht oft hineinKann ich dir den Fragebogen auch privat schicken?
Dann schreibe ich Dir meine Mail-Adresse.
Joffm
Volunteers are not paid.
Not because they are worthless, but because they are priceless
Please Log in to join the conversation.
- Lena_12345
- Topic Author
- Offline
- Senior Member
- Posts: 61
- Thank you received: 0
Ich habe nochmal eine Rückfrage. Das mit der Gleichung hat funktioniert.
Das Problem ist jedoch, dass je nachdem was der Befragte für Zahlen angibt, teilweise sehr lange Ergebnisse rauskommen.
Beispielsweise wird eine Ausgabe von 14 Euro angegeben und eine Mehrzahlungsbereitschaft von 80%.
Meine Formel lautet: sum((Ausgabenvorher), (Ausgabenvorher * (wtp / 100))).
Daraus wird dann folgende Zahl berechnet, was ja an sich richtig ist: 25,200000000000001 €. Jedoch sieht das ganze dann nicht so schön aus aufgrund der vielen Nachkommastellen.
Gibt es eine Gleichung mit der man einstellen kann, wie viele Nachkommastellen angezeigt werden sollen?
An sich weiß ich dass man dies bei Limesurvey einstellen kann, da ich jedoch den Fragetyp Gleichung habe, kann man dies nicht einstellen, soweit ich weiß.
Ich hoffe mein Anliegen ist verständlich.
Please Log in to join the conversation.
- Joffm
- Offline
- LimeSurvey Community Team
- Posts: 12940
- Thank you received: 3979
bei den implemetierten Funktionen findest Du das gewünschte:
[url] manual.limesurvey.org/ExpressionScript_-...mplemented_functions [/url]
Die Funktion "round(x,y)". Funktioniert wie in Excel.
Dann hast Du dies, (ohne Deine Klammer-Orgie)
{round(sum(Ausgabenvorher, Ausgabenvorher * wtp / 100),2)}
Sollte die Rundung auf zwei Stellen nicht funktionieren - es gab da einmal etwas - , macht man es auf die altbewährte Art.
Ich zitiere mich einmal selbst aus einem anderen Thread.
Falls Du die zwei Nachkommastellen erzwingen willst, also "25,20" wird es komplizierter.siehst Du, das ist der Vorteil des Alters.
Wir haben so etwas noch gelernt, was zu tun ist, wenn nur die Funktion "round()" für ganze Zahlen zur Verfügung steht.
Zunächst nimmst Du die Zahl mit der Zehnerpotenz mal, die Deiner gewünschten Nachkommastellenzahl entspricht.
10 für 1
100 für 2
1000 für 3
...
Also in Deinem Beispiel nimmst Du die 21,4475678... mit 100 mal und erhältst
2144,75678...
Diese rundest Du nun ganz normal und es gibt
2145
Und jetzt machst Du den ersten Schritt wieder rückgängig, indem Du durch 100 teilst.
Voila: 21,45
In LS-Syntax
{round(100*sum(Ausgabenvorher, Ausgabenvorher * wtp / 100))/100}
Ich habe aber einmal etwas dazu geschrieben; such einfach einmal.
Edit: Ich habe es gefunden.
[url] forums.limesurvey.org/forum/can-i-do-thi...rs-with-two-decimals [/url]
Jetzt stelle ich einmal eine Frage.
Wo kann man in LimeSurvey die Anzahl der Kommastellen einstellen?An sich weiß ich dass man dies bei Limesurvey einstellen kann,
Ich kann eine Eingabe mit Regex validieren, aber sonst?
Da musst jetzt Du mir einmal auf die Sprünge helfen.
Bis dann
Joffm
Volunteers are not paid.
Not because they are worthless, but because they are priceless
Please Log in to join the conversation.
- Lena_12345
- Topic Author
- Offline
- Senior Member
- Posts: 61
- Thank you received: 0
Bezüglich Ihrer Frage, wo man noch die Nachkommastellen einstellen kann:
Damit meinte ich die Validierung bei den normalen Einstellungen
LG
Please Log in to join the conversation.
- Joffm
- Offline
- LimeSurvey Community Team
- Posts: 12940
- Thank you received: 3979
ich habe dort ja dieses vorgeschlagen:
Vorauszuschicken ist, dass in diesem Thread auf eine Kommastelle gerundet, aber zwei Stellen angezeigt werden sollten.
{if(strpos(fixnum(round(Q1,1)),'.')==0,join(fixnum(round(Q1,1)),'.00'),if(strpos(fixnum(round(Q1,1)),'.')==strlen(fixnum(round(Q1,1)))-2,join(fixnum(round(Q1,1)),'0'),fixnum(round(Q1,1))))}
Wir lassen einmal die Formel für das Runden weg; nehmen Q1 als bereits gerundete Zahl. Dann bleibt
{if(strpos(Q1,'.')==0,join(Q1,'.00'),if(strpos(Q1,'.')==strlen(Q1)-2,join(Q1,'0'),Q1))}
D.h. die gerundete Zahl kann diese Formen haben
12 oder 12.3
Das obige geschachtelte IF macht nichts anderes, als
1. zu gucken, ob kein Punkt in der Zahl enthalten ist if(strpos(Q1,'.')==0
Also ist es eine ganze Zahl und es wird einfach ".00" angehängt ,join(Q1,'.00')
2. Falls der erste Fall nicht zutrifft, wird geguckt, ob ein Punkt an der vorletzten Stelle ist
{if(strpos(Q1,'.')==strlen(Q1)-2
Hierbei ist zu beachten, dass die erste Position der Funktion "strpos(x,y) der Index 0 hat - daher -2
Dann ist er eine Zahl der Form 12.3 und es wird nur eine "0" angehängt. join(Q1,'0')
3. Wenn beide Fälle nicht zutreffen - was eigentlich nicht sein kann - wird einfach die ursprüngliche Zahl zurückgegeben.
In dem anderen Thread ist ja eine etwas langwierige Diskussion darüber, dass diese Funktion natürlich von der Einstellung des Dezimaltrennzeichens abhängt - Punkt oder Komma.
Hier habe ich alles für Punkt als Trennzeichen geschildert; im anderen Fall muss man eben alles auf Komma ändern.
Und auch bei Dir kann die auf zwei Stellen gerundete Zahl ja auch nur die Formen annehmen:
12, 12.3 oder 12.34
Die ersten beiden Flle werden von der obigen Gleichung erschlagen, die dritte ist genau der dritte Fall, bei welchem enben nichts gemacht wird.
Das ist das ganze Geheimnis.
Einfach mit der Funktion "strpos(x,y)" gucken und mit "join(a,b,c,...)" das Benötigte anhängen
Und wenn es partout nicht klappt, wie immer: lss Export Deines Werkes.
Ich habe übrigens einen Samsung-Fernseher, aber - zugegeben - LG ist auch keine schlechte Marke.
Volunteers are not paid.
Not because they are worthless, but because they are priceless
Please Log in to join the conversation.
- Lena_12345
- Topic Author
- Offline
- Senior Member
- Posts: 61
- Thank you received: 0
Ich habe ja auch diese Formel bereits in meinem Fragentext stehen: {round((Ausgabenvorher*(wtp/100)),2)}.
Please Log in to join the conversation.
- Lena_12345
- Topic Author
- Offline
- Senior Member
- Posts: 61
- Thank you received: 0
if(strpos(fixnum(round((Ausgabenvorher * (wtp / 100), 2))), ',') == 0, join(fixnum(round((Ausgabenvorher * (wtp / 100), 2))), ',00'), if(strpos(fixnum(round((Ausgabenvorher * (wtp / 100), 2))), ',') == strlen(fixnum(round((Ausgabenvorher * (wtp / 100), 2)))) - 2, join(fixnum(round((Ausgabenvorher * (wtp / 100), 2))), '0'), fixnum(round((Ausgabenvorher * (wtp / 100), 2)))))
Es werden jetzt immer zwei Nachkommastellen angezeigt. Jedoch wird mir als Ausgabenerhöhung immer 2,00 Euro angezeigt. Obwohl es eigentlich andere Zahlen sein müssten..
Please Log in to join the conversation.
- Lena_12345
- Topic Author
- Offline
- Senior Member
- Posts: 61
- Thank you received: 0
Vielen Dank für die Formel
Please Log in to join the conversation.
- Joffm
- Offline
- LimeSurvey Community Team
- Posts: 12940
- Thank you received: 3979
und wo ist der lss Export dieser Fragen?
Ich werde jetzt nicht versuchen, diesen Teil Deiner Umfrage nachzubauen.
Hast Du Dir denn schon einmal anzeigen lassen, was die Teile der Funktion ergeben?
1. Die Multiplikation
2. Das Runden
3. Fixnum
4. Strpos
Und, ich hatte es schon sehr dezent angedeutet: Berechne die Erhöhung einmal vorher und nicht in jedem If- Teil jeweils zweimal.
Dann hättest Du eine Gleichung (ich habe einmal an "betrag" gedacht) mit
{fixnum(round(sum(Ausgabenvorher,Ausgabenvorher*wtp/100),2))}
und die Zahl wird angezeigt mit
{if(strpos(betrag, ',') == 0, join(betrag, ',00'), if(strpos(betrag, ',') == strlen(betrag) - 2, join(betrag, '0'), betrag))}
Joffm
P.S.
Du testest ja auf Komma als Dezimaltrennzeichen; hast Du dies auch so eingestellt?
Hier berechnest Du ja nur die Mehrausgabe, nicht den Gesamtbetrag; das war aber doch früher so gedacht, oder?
Meine Formel lautet: sum((Ausgabenvorher), (Ausgabenvorher * (wtp / 100))).
Volunteers are not paid.
Not because they are worthless, but because they are priceless
Please Log in to join the conversation.
- Lena_12345
- Topic Author
- Offline
- Senior Member
- Posts: 61
- Thank you received: 0
Ich brauche nochmal Hilfe.
Ich hoffe Sie können mir sagen, inwiefern ich meinen Gleichung abändern muss.
Und zwar werden meine Zahlen jetzt zu stark gerundet. Wenn man z.B. 1,50 ausgibt müsste bei einer Preiserhöhung von 10% ja der neue Preis bei 1,65 liegen. Nun wird mir aber 1,70 angezeigt und eine Preiserhöhung von 20 Cent.
Ich habe folgende Formel verwendet:
Für die Preiserhöhnung:
f
Bedingte Bearbeitung; if(test,result_if_true[,result_if_false = ''])
(strpos(fixnum(round((round((ExpendituresPrevious * (WTP / 100)), 2)), 1)), ',') == 0, join(fixnum(round((round((ExpendituresPrevious * (WTP / 100)), 2)), 1)), ',00'), if(strpos(fixnum(round((round((ExpendituresPrevious * (WTP / 100)), 2)), 1)), ',') == strlen(fixnum(round((round((ExpendituresPrevious * (WTP / 100)), 2)), 1))) - 2, join(fixnum(round((round((ExpendituresPrevious * (WTP / 100)), 2)), 1)), '0'), fixnum(round((round((ExpendituresPrevious * (WTP / 100)), 2)), 1))))
für den neuen Preis:
if(strpos(fixnum(round((round(sum(ExpendituresPrevious, ExpendituresPrevious * WTP / 100), 2)), 1)), ',') == 0, join(fixnum(round((round(sum(ExpendituresPrevious, ExpendituresPrevious * WTP / 100), 2)), 1)), ',00'), if(strpos(fixnum(round((round(sum(ExpendituresPrevious, ExpendituresPrevious * WTP / 100), 2)), 1)), ',') == strlen(fixnum(round((round(sum(ExpendituresPrevious, ExpendituresPrevious * WTP / 100), 2)), 1))) - 2, join(fixnum(round((round(sum(ExpendituresPrevious, ExpendituresPrevious * WTP / 100), 2)), 1)), '0'), fixnum(round((round(sum(ExpendituresPrevious, ExpendituresPrevious * WTP / 100), 2)), 1))))
Please Log in to join the conversation.
- Lena_12345
- Topic Author
- Offline
- Senior Member
- Posts: 61
- Thank you received: 0
Please Log in to join the conversation.
- holch
- Offline
- LimeSurvey Community Team
- Posts: 11660
- Thank you received: 2742
Ok, ich habe es nun selbst gelöst
Wäre natürlich super wenn du erklären würdest, was falsch war und wie du es korrigiert hast, für all die die später mit einem ähnlichen Probem auf deinen Post stossen.
I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.
Please Log in to join the conversation.