Remove trailing zeros in decimal value with changing length

前端 未结 15 2813
醉话见心
醉话见心 2020-12-05 04:36

I have a procedure I am doing that displays odds but the client wants only significant digits to be shown. So, 1.50 would show as \'1.5\' and 1.00 would show as \'1\'.

相关标签:
15条回答
  • 2020-12-05 05:30

    I had a similar problem in a situation where I could not modify the code nor the SQL query, but I was allowed to modify the database structure. So I changed the column format from DECIMAL to FLOAT and it solved my problem.

    0 讨论(0)
  • 2020-12-05 05:31

    Please use below function , it will take care of number having zero without decimal places i.e 150 etc....

     SET @saved_cs_client     = @@character_set_client;
     SET character_set_client = utf8;
     DELIMITER $$
     USE `mydbname`$$
    
     DROP FUNCTION IF EXISTS `FN_STRIP_TRAILING_ZER0`$$
    
     CREATE DEFINER=`mydbuser`@`%` FUNCTION `FN_STRIP_TRAILING_ZER0`(tNumber DECIMAL(10,7)) RETURNS VARCHAR(20) CHARSET utf8
    
     BEGIN
         DECLARE strBuff VARCHAR(20);
         DECLARE cnt  NUMERIC(2);
         DECLARE tString VARCHAR(20);
         SELECT CAST(tNumber AS CHAR) INTO tString;
         SELECT LOCATE('.',tString) INTO cnt;
         IF cnt > 0 THEN
           SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM tString)) INTO strBuff;   
         ELSE
           SET strBuff = tString;
         END IF;
         RETURN strBuff;
     END$$
     DELIMITER ;
     SET character_set_client = @saved_cs_client;
    

    Addendum:

    Typically to call this would involve: SELECT FN_STRIP_TRAILING_ZER0(1.5);

    0 讨论(0)
  • 2020-12-05 05:31
    SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
    FROM yourtable
    WHERE yourfield LIKE '%.%'
    

    or

    SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' from yourfield)) AS yourfield
    FROM yourtable
    WHERE instr(yourfield,'.') != 0
    

    work ok but require a "where" clause.

    I think the best solution is probably:

    SELECT TRIM(TRAILING '.' FROM TRIM(TRAILING '0' FROM ROUND(yourfield,3))) 
    FROM yourtable
    

    as it doesn't require a "where" clause, doesn't require any special code, and also lets you set the maximum precision of the number upfront.

    0 讨论(0)
提交回复
热议问题