Member 13585503 Ответов: 2

Как вычесть и добавить число с разделителями типа (1.500, 00)


Привет,
вот часть моего кода
statement=connection.prepareStatement("SELECT prix_loge FROM Liste WHERE Nom=? AND Prenom=?");
			    	 statement.setString(1, comboBox_1.getSelectedItem().toString());
					 statement.setString(2, comboBox_2.getSelectedItem().toString());
						ResultSet rs=statement.executeQuery();
						prix.setText(rs.getString("prix_loge"));
						prix.getText();
						statement.close();
					
					statement=connection.prepareStatement("SELECT Verse_total FROM Versement WHERE Nom=? AND Prenom=?");
			    	 statement.setString(1, comboBox_1.getSelectedItem().toString());
					 statement.setString(2, comboBox_2.getSelectedItem().toString());
						ResultSet rs1=statement.executeQuery();
					somme.setText(rs1.getString("Verse_total"));
					somme.getText();
					statement.close();
					
					
			 statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_loge, Nom_projet, Verse_total, Verse_restant,id_verse) VALUES(?,?,?,'"+verse.getText()+"','" +  prix.getText() +"', (SELECT Nom_projet From Client WHERE Nom= ? AND Prenom= ?), ('"+ somme.getText()+"'+'"+verse.getText()+"') , ('"+prix.getText()+"' - '"+ somme.getText()+"'- '"+verse.getText()+"'),?) ");            
			
			 statement.setString(1, comboBox_1.getSelectedItem().toString());
			 statement.setString(2, comboBox_2.getSelectedItem().toString());
			 statement.setString(3, date.getText());
			 statement.setString(4, comboBox_1.getSelectedItem().toString());
			 statement.setString(5, comboBox_2.getSelectedItem().toString());
			 statement.setString(6, comboBox_4.getSelectedItem().toString());
				
			
			 statement.executeUpdate();
			    
			 	statement.close();
			    statement.close();
			    statement.close();
			    statement.close();
			  
			    
			 statement= connection.prepareStatement("UPDATE Liste SET Verse_total='"+somme.getText()+"'+'"+verse.getText()+"' , Verse_restant='"+ prix.getText()+"'-'"+somme.getText()+"', Verse_2=( SELECT(Somme_versee) FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=2),Verse_3= (SELECT(Somme_versee) FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=3),Verse_4= (SELECT(Somme_versee) FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=4),Verse_5= (SELECT(Somme_versee) FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=5),Verse_6= (SELECT(Somme_versee) FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=6),Verse_7= (SELECT(Somme_versee) FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=7), Date_2=(SELECT Date FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=2),Date_3=(SELECT Date FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=3), Date_4=(SELECT Date FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=4),Date_5=(SELECT Date FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=5),Date_6=(SELECT Date FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=6), Date_7=(SELECT Date FROM Versement WHERE Nom=? AND Prenom=? AND id_verse=7) WHERE Nom=? AND Prenom= ? " );
			 
			 
			 
			 statement.setString(1, comboBox_1.getSelectedItem().toString());
			 statement.setString(2, comboBox_2.getSelectedItem().toString());
			

			 statement.setString(3, comboBox_1.getSelectedItem().toString());
			 
			 statement.setString(4, comboBox_2.getSelectedItem().toString());
			 statement.setString(5, comboBox_1.getSelectedItem().toString());
			 statement.setString(6, comboBox_2.getSelectedItem().toString());
			 statement.setString(7, comboBox_1.getSelectedItem().toString());
			 statement.setString(8, comboBox_2.getSelectedItem().toString());
			 statement.setString(9, comboBox_1.getSelectedItem().toString());
			 statement.setString(10, comboBox_2.getSelectedItem().toString());
			 statement.setString(11, comboBox_1.getSelectedItem().toString());
			 statement.setString(12, comboBox_2.getSelectedItem().toString());
			 statement.setString(13, comboBox_1.getSelectedItem().toString());
			 statement.setString(14, comboBox_2.getSelectedItem().toString());
			
			 
			 
			 statement.executeUpdate();



вычитание и сложение действительного числа (например, 10.200,00) дают ложный результат

Что я уже пробовал:

я краснею уже 2 недели

2 Ответов

Рейтинг:
1

Member 13585503

Спасибо , я решаю эту проблему

statement=connection.prepareStatement("SELECT prix_loge FROM Liste WHERE Nom=? AND Prenom=?");
			    	 statement.setString(1, comboBox_1.getSelectedItem().toString());
					 statement.setString(2, comboBox_2.getSelectedItem().toString());
						ResultSet rs=statement.executeQuery();
						prix.setText(rs.getString("prix_loge"));
						prix.getText();
						statement.close();
					
					statement=connection.prepareStatement("SELECT Verse_total FROM Versement WHERE Nom=? AND Prenom=?");
			    	 statement.setString(1, comboBox_1.getSelectedItem().toString());
					 statement.setString(2, comboBox_2.getSelectedItem().toString());
						ResultSet rs1=statement.executeQuery();
					somme.setText(rs1.getString("Verse_total"));
					somme.getText();
					statement.close();
					
					DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.getDefault());
					symbols.setGroupingSeparator('.');//simple space

					DecimalFormat df = new DecimalFormat("#,###.00", symbols);
					double one = df.parse(prix.getText()).doubleValue();
					
					double two= df.parse(somme.getText()).doubleValue();
					
					double tree =df.parse(verse.getText()).doubleValue();
					
					double r=two+tree; 
					
					String r1= String.valueOf(r);
					BigDecimal r2=new BigDecimal(r1);
					String str = df.format(r2);
					String t=str.replace(",", ",").replaceAll(" ", " ");
					
			 
					double r11= one-(two+tree); 
					String r22= String.valueOf(r11);
					BigDecimal r21=new BigDecimal(r22);
					String str1 = df.format(r21);
					String t1=str1.replace(",", ",").replaceAll(" ", " ");
				
			 statement = connection.prepareStatement("INSERT INTO Versement ( Nom , Prenom, Date , Somme_versee,Prix_loge, Nom_projet, Verse_total, Verse_restant,id_verse) VALUES(?,?,?,'"+verse.getText()+"','" +  prix.getText() +"', (SELECT Nom_projet From Client WHERE Nom= ? AND Prenom= ?), (?) , (?),?) ");            
			
			 statement.setString(1, comboBox_1.getSelectedItem().toString());
			 statement.setString(2, comboBox_2.getSelectedItem().toString());
			 statement.setString(3, date.getText());
			 statement.setString(4, comboBox_1.getSelectedItem().toString());
			 statement.setString(5, comboBox_2.getSelectedItem().toString());
			 statement.setString(6, t);	
			 statement.setString(7, t1);	
			 statement.setString(8, comboBox_4.getSelectedItem().toString());
			 
			
			 statement.executeUpdate();


Рейтинг:
0

Patrice T

Цитата:
Как вычесть и добавить число с разделителями типа (1.500, 00)

Вам, вероятно, нужно изменить формат для нас.
- удалите '.' из строки и замените "," на "."
Использование параметров и числовой переменной также решило бы эту проблему.

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]