将小数点后的数字存储到MySQL中的变量中

问题描述 投票:0回答:3

让我现在将要在点(76)之后的数字存储到变量中。我应该怎么做?我将在下面给出一个方案。

declare x (3,2);
set x = 323.76;
declare y int;
select cast(substring_index(x, '.', -1) as unsigned) into y;

任何帮助将不胜感激。

mysql database triggers decimal point
3个回答
0
投票

作为过程或函数和触发器,您可以使用代码(稍有更改)

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `mantisse`()
BEGIN
declare x DECIMAL(8,2);

declare y int;
set x = 323.76;
select cast(substring_index(x, '.', -1) as unsigned) into y;
INSERT INTO mytable VALUE (y);
END$$
DELIMITER ;

或者,如果您想在查询中使用它,则可以使用用户定义的变量

set @x = 323.96;
select cast(substring_index(@x, '.', -1) as unsigned) into @y;
INSERT INTO mytable VALUE (@y);

0
投票

您可以使用MOD功能轻松地从数字中获取小数:

SET @num = 323.76;
SET @decimals = MOD(@num, 1) * 100;
SELECT @decimals; -- 76.00

除以1,您可以使用MOD功能获得余数,即0.76,然后只需将其乘以100。


0
投票

如果我了解此规范,那似乎很奇怪。我将使用substring_index函数修剪掉点之前(包括点)的所有内容。但是我会做数学运算得出值v,0 <= v <1

按照问题中给出的MySQL存储程序伪代码,如下所示:

DECLARE x DECIMAL(5,2);
DECLARE y BIGINT;

SET x := 323.76;
SET y := SUBSTRING_INDEX( ABS(x)-FLOOR(ABS(x)) ,'.',-1) + 0;

可能有一种更简单的方法,但这是满足我对规范的理解的一种方法。

作为导出y值的表达式的说明,请考虑:

SELECT _x
     , SUBSTRING_INDEX( ABS(_x)-FLOOR(ABS(_x)) ,'.',-1) + 0 AS _y
  FROM ( SELECT 0 AS _x
         UNION ALL SELECT 0.1
         UNION ALL SELECT 2.0 
         UNION ALL SELECT 3.3
         UNION ALL SELECT -4.00
         UNION ALL SELECT -5.55
         UNION ALL SELECT 623.76
         UNION ALL SELECT -723.76
       ) t

返回

_x       _y  
-------  -----
   0.00      0
   0.10     10
   2.00      0
   3.30     30
  -4.00      0
  -5.55     55
 623.76     76
-723.76     76
© www.soinside.com 2019 - 2024. All rights reserved.