Как отобразить результат умножения с двумя десятичными разрядами - PullRequest
0 голосов
/ 01 ноября 2019

Я строю запрос, который должен вывести результат умножения двух полей в качестве значения валюты. 0,00 - 9999,99.

Я пробовал несколько предложенных решений, и до сих пор либо они дают синтаксические ошибки, либо округляют до целого числа без десятичной дроби

Нужно ли отделять умножение от отформатированного результата?

Мой текущий запрос.

mysql> SELECT b.RowNumber,b.Email, z.PriceMultiplier * p.Price
    -> FROM Production p JOIN Performace pe ON p.Title = pe.Title
    -> JOIN Booking b ON b.PerfDate = pe.PerfDate AND b.Perftime = pe.PerfTime
    -> JOIN Seat s ON s.RowNumber = b.RowNumber
    -> JOIN Zone z ON z.Name = s.Zone;
+-----------+----------------------+-----------------------------+
| RowNumber | Email                | z.PriceMultiplier * p.Price |
+-----------+----------------------+-----------------------------+
| Z16       | Jane.Dot@live.com    |                          60 |
| Z18       | ZP@email.com         |                          60 |
| Z19       | ZP@email.com         |                          60 |
| U19       | Jane.Dot@live.com    |          26.999999284744263 |
| U20       | Jane.Dot@live.com    |          26.999999284744263 |
| X13       | Mike.Stand@email.com |          26.999999284744263 |
| X14       | Mike.Stand@email.com |          26.999999284744263 |
| Z19       | qvf3@live.com        |                          60 |
+-----------+----------------------+-----------------------------+


Типы данных - PriceMultiplier FLOAT NOT NULL и Price DECIMAL (6,2) NOT NULL

Команда TRUNCATE представляется наиболее рекомендуемой, однако она округляется

26.999999284744263 - должно стать 26.99, а не 27

Ответы [ 3 ]

1 голос
/ 01 ноября 2019

Вам нужна функция TRUNCATE():

TRUNCATE(p.BasicTicketPrice * z.PriceMultiplier, 2)

Например:

select truncate(26.999999284744263, 2)

возвращает

26.99
0 голосов
/ 03 ноября 2019

После установки обоих типов данных на Float.

PriceMultiplier FLOAT NOT NULL и Price FLOAT NOT NULL

Усечение сработало, без округления.

U19 |Jane.Dot@live.com |26,99 |

0 голосов
/ 01 ноября 2019

Используйте функцию округления MySQL в своем запросе - ROUND (число, десятичные дроби)

например, SELECT ProductName, Price, ROUND (Price, 1) AS RoundedPrice FROM Products;- Взято из https://www.w3schools.com/sql/func_mysql_round.asp

Для вашего конкретного запроса попробуйте что-то вроде

SELECT b.RowNumber, b.Email, ROUND(p.BasicTicketPrice * z.PriceMultiplier,2) AS Price FROM Booking b 
JOIN Performance pe ON pe.PerfDate = b.PerfDate AND b.PerfTime = pe.PerfTime 
JOIN Production p ON pe.Title = p.Title JOIN Seat s ON b.RowNumber = s.RowNumber 
JOIN Zone z ON s.Zone = z.Name WHERE s.Zone = z.Name; 

Усечение также дает ответ, который вы после

SELECT Truncate(26.999999284744263, 2);

26.99

Удачи с вашимисследования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...