`
helloyesyes
  • 浏览: 1326075 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

用Oracle PL/SQL 编程实现小数转分数的方法

阅读更多
刚在CNOUG看到有人提问如何用PL/SQL 实现小数转分数的问题,下面这段代码是我的实现,主要思路是将输入的整数及小数都分别取出,然后将小数写成以10的n次方的分数,再求其最大公约数,得到简化的分数,最后将整数及分数合并。代码里有一些处理细节,如负数处理,纯整数处理,纯小数处理等等。
create or replace function dftof(iStr number) return varchar2 as

  --小数转分数

  -- (decimal fraction) to fraction

  --设计人:叶正盛

  v_Str   varchar(50);

  result  varchar(50);

  v_fh    varchar(1); --负数符号

  v_zs    varchar2(20); --整数

  v_xs    varchar2(20); --小数

  v_pos   int; --小数点位置

  v_fm    integer; --分母

  v_fz    integer; --分子

  v_zdgys integer; --最大公约数

  --求最大公约数

  function getZDGYS(iNum1 integer, iNum2 integer) return integer as

    v_ys   integer; --余数

    v_num1 integer;

    v_num2 integer;

  begin

    v_num1 := iNum1;

    v_num2 := iNum2;

    v_ys   := mod(v_num1, v_num2);

    --辗转相除法

    while v_ys <> 0 loop

      v_num1 := v_num2;

      v_num2 := v_ys;

      v_ys   := mod(v_num1, v_num2);

    end loop;

    return v_num2;

  end;

begin

  v_Str := trim(iStr);

  v_pos := instr(v_Str, '.'); --计算小数点位置

  if v_pos = 0 then

    result := v_Str; --纯整数

  else

    if substr(v_Str, 1, 1) = '-' then

      v_zs := substr(v_Str, 2, v_pos - 2); --整数

    else

      v_zs := substr(v_Str, 1, v_pos - 1); --整数

    end if;

    v_xs := substr(v_Str, v_pos + 1); --小数

    if to_number(nvl(v_zs, '0')) = 0 then

      if substr(v_zs, 1, 1) = '-' then

        v_zs := '-'; --如果整数为-0则显示负号

      else

        v_zs := ''; --如果整数为0则不显示整数

      end if;

    else

      v_zs := v_zs || '+'; --整数部份显示样式

    end if;

    v_fz    := to_number(v_xs); --分子

    v_fm    := power(10, length(v_xs)); --分母

    v_zdgys := getZDGYS(v_fm, v_fz); --求最大公约数

    result  := (v_fz / v_zdgys) || '/' || (v_fm / v_zdgys);

    if substr(v_Str, 1, 1) = '-' then

      result := '-(' || v_zs || result || ')';

    else

      result := v_zs || result;

    end if;

  end if;

  return result;

end;
测试结果
Connected to Oracle9i Enterprise Edition Release 9.2.0.7.0 
Connected as yzs
SQL> select dftof(0.4) from dual;

DFTOF(0.4)

--------------------------------------------------------------------------------

2/5

SQL> select dftof(3.4) from dual;

DFTOF(3.4)

--------------------------------------------------------------------------------

3+2/5

SQL> select dftof(-92.25) from dual;

DFTOF(-92.25)

--------------------------------------------------------------------------------

-(92+1/4)

SQL> select dftof(-0.375) from dual;

DFTOF(-0.375)

--------------------------------------------------------------------------------

-(3/8)

SQL> select dftof(-.375) from dual;

DFTOF(-.375)

--------------------------------------------------------------------------------

-(3/8)

分享到:
评论

相关推荐

    PL/SQL详细基础教程

    PL/SQL是Oracle数据库系统中的一个关键组成部分,它结合了SQL的查询能力与过程性编程语言的功能,使得数据库管理、数据处理以及应用开发更为高效。本详细基础教程旨在为Oracle开发者提供全面的PL/SQL学习资源,以下...

    pl/sql数据库学习笔记

    PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量(初始值是多少,最终值...

    pl/sql相关学习文档

    PL/SQL(Procedural Language for SQL)是Oracle数据库的一种专用编程语言,它将过程化代码块与SQL命令相结合,允许开发者创建功能丰富的应用程序和服务。PL/SQL不仅支持SQL数据操纵功能,还增加了程序控制结构,如...

    全面对比T-SQL与PL/SQL

    T-SQL 是微软公司开发的 SQL Server 数据库管理系统的脚本语言,而 PL/SQL 是 Oracle 公司开发的 Oracle 数据库管理系统的脚本语言。 数据类型 在 T-SQL 中,numeric(p,s) 用于定义一个带有精度和小数位的数字类型...

    oracle PL-SQL 基础

    根据提供的文件信息,我们可以深入探讨Oracle PL/SQL的基础知识点,包括其历史背景、优势、基本结构、以及变量的定义和使用等内容。 ### PL/SQL的历史 PL/SQL(Procedural Language for SQL)是一种专门为Oracle...

    PL/SQL程序设计课件

    PL/SQL是Oracle数据库对SQL的扩展,增加了过程化编程元素,使得数据库操作更为灵活和强大。 PL/SQL结构分为三个主要部分:声明部分、执行部分和异常处理部分。声明部分用于定义变量和常量,执行部分包含程序的主要...

    Oracle PL SQL语言基础

    Oracle PL/SQL是一种在Oracle数据库环境中使用的结构化查询语言(SQL)的扩展,它结合了SQL的查询功能和过程编程语言的特点,使得开发者能够编写复杂的数据库应用程序。在本教程中,我们将深入探讨PL/SQL的基础知识...

    PL/SQL程序语言教程

    PL/SQL(过程化SQL语言)是Oracle数据库特有的一种编程语言,它将传统的SQL查询语句与编程语言特性相结合,使得开发者能够编写更为复杂的业务逻辑。通过在SQL基础上增加控制流结构(如循环、条件判断等),PL/SQL...

    Oracle PL SQL基础培训教程

    PL/SQL全称为Procedural Language extensions to SQL,是Oracle数据库提供的一个编程环境,它将SQL语句与过程性编程元素结合在一起,允许用户创建和管理数据库对象,以及处理数据库中的数据。PL/SQL的代码组织结构...

    很有价值的oracle SQL编程笔记

    Oracle SQL编程是数据库管理的重要组成部分,特别是在Oracle数据库系统中,SQL与PL/SQL结合使用,大大增强了数据库操作的灵活性和效率。以下是一些关键知识点的详细说明: 1. **PL/SQL**: PL/SQL(Procedural ...

    汉字大写金额转换(PL/SQL)

    输入的数值可以是整数,也可以带小数位,还可以带千分位符. 代码作用:通过此段代码,综合地演示了ORACLE内置函数的用法.可以将此段代码改写为存储函数,供程序调用 代码编写:辽宁.孟祥新(oraclestudy@21cn.com) 注意:如...

    Oracle-PL-SQL入门教程(经典)

    ### Oracle-PL/SQL 入门教程精要 #### SQL语言概述 - **定义与功能**:SQL(Structured Query Language,结构化查询语言)是一种专为数据库设计的标准计算机语言,主要用于管理和操作数据库中的数据。根据ANSI...

    福建省电力公司oracle培训教材--PLSQL语言篇.pptx

    PL/SQL(Procedural Language/SQL)是Oracle数据库系统中的编程语言,它结合了SQL的查询能力与过程化编程的灵活性,用于开发高效、可靠的数据库应用程序。PL/SQL提供了丰富的数据类型、控制结构、游标、异常处理和...

    oracle-function--api.zip_oracle_oracle API_oracle sql api

    PL/SQL是Oracle数据库的内置编程语言,它允许用户创建存储过程、函数、触发器等。通过PL/SQL,可以实现更复杂的数据处理逻辑和业务规则,提高应用性能。 例如,你可以创建一个名为`GET_AVERAGE`的PL/SQL函数来计算...

    Oracle开发应用(PLSQL)基础大全及实例讲解.pdf

    Oracle开发应用的基础主要涵盖PL/SQL编程语言的使用,这是Oracle数据库系统中用于创建和管理数据库应用程序的关键工具。PL/SQL是SQL的扩展,增加了流程控制、异常处理和子程序等高级特性。以下是对PL/SQL基础知识的...

    PL-SQL教程(私塾在线)视频配套学习资料

    - **定义**:PL-SQL(Procedural Language for SQL)是一种过程化的SQL语言,由Oracle公司开发,用于扩展标准SQL的功能,使之具备更强大的编程能力。 - **特点**: - 结合了SQL的数据操作能力和传统过程化编程语言...

    Oracle数据库教程 第7章1.pptx

    【Oracle数据库教程 第7章1.pptx】主要讲解了PL/SQL编程,这是Oracle数据库系统中的重要编程语言。PL/SQL结合了SQL的查询能力与面向过程的编程语法,用于编写高效、复杂的数据库应用程序。 **7.1 PL/SQL语言基础** ...

    oracle的plsql基础,常用函数

    Oracle的PL/SQL是Oracle数据库中的一个强大编程环境,它结合了SQL的查询能力与过程化编程语言的灵活性。在本篇文章中,我们将深入探讨PL/SQL的基础以及Oracle中的常用函数。 PL/SQL(Procedural Language/...

Global site tag (gtag.js) - Google Analytics