如何显示有两位小数的乘法结果

时间:2019-11-01 11:07:31

标签: mysql syntax

我正在构建一个查询,该查询需要将两个字段的相乘结果作为货币值输出。 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不为空,价格DECIMAL(6,2)不为空

似乎最推荐使用TRUNCATE命令,但是它是四舍五入的

26.999999284744263-应该变成26.99而不是27

3 个答案:

答案 0 :(得分:1)

您需要功能TRUNCATE()

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

例如:

select truncate(26.999999284744263, 2)

返回

26.99

答案 1 :(得分:0)

在查询中使用MySQL的Round函数-ROUND(数字,小数)

例如选择产品名称,价格,ROUND(价格,1)AS取整价格 FROM产品; -摘自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

祝你学习顺利

答案 2 :(得分:0)

将两种数据类型都设置为“浮动”后。

PriceMultiplier FLOAT NOT NULL和Price FLOAT NOT NULL

截断有效,不取整。

U19 | Jane.Dot@live.com | 26.99 |