广告
返回顶部
首页 > 资讯 > 后端开发 > GO >golang 比较浮点数的大小方式
  • 465
分享到

golang 比较浮点数的大小方式

2024-04-02 19:04:59 465人浏览 独家记忆
摘要

golang浮点数比较和运算会出现误差。 浮点数储存至内存中时,2的-1、-2……-n次方不能精确的表示小数部分,所以再把这个数从地址中取出来进行计算就出现了偏差。 packag

golang浮点数比较和运算会出现误差。

浮点数储存至内存中时,2的-1、-2……-n次方不能精确的表示小数部分,所以再把这个数从地址中取出来进行计算就出现了偏差。


package main
import (
	"errors"
	"fmt"
	"GitHub.com/shopspring/decimal"
)
func FloatCompare(f1, f2 interface{}) (n int, err error) {
	var f1Dec, f2Dec decimal.Decimal
	switch f1.(type) {
	case float64:
		f1Dec = decimal.NewFromFloat(f1.(float64))
		switch f2.(type) {
		case float64:
			f2Dec = decimal.NewFromFloat(f2.(float64))
		case string:
			f2Dec, err = decimal.NewFromString(f2.(string))
			if err != nil {
				return 2, err
			}
		default:
			return 2, errors.New("FloatCompare() expecting to receive float64 or string")
		}
	case string:
		f1Dec, err = decimal.NewFromString(f1.(string))
		if err != nil {
			return 2, err
		}
		switch f2.(type) {
		case float64:
			f2Dec = decimal.NewFromFloat(f2.(float64))
		case string:
			f2Dec, err = decimal.NewFromString(f2.(string))
			if err != nil {
				return 2, err
			}
		default:
			return 2, errors.New("FloatCompare() expecting to receive float64 or string")
		}
	default:
		return 2, errors.New("FloatCompare() expecting to receive float64 or string")
	}
	return f1Dec.Cmp(f2Dec), nil
}
func main() {
	a:=4.0
	b:="4"
	fmt.Println(FloatCompare(a,b))
}

补充:golang 判断2个浮点型数字是否相同

判断2个浮点型数字是否相同的方法(假定整数部分+小数点后3位相同,则视为相同)

首先将2个浮点型数字转换为string数据

将float类型的数据转换成string


func Decimal(value float32) string {
   value1 := fmt.Sprintf("%.6f", value)
   return value1
}

比较两个由float型数据转化成string的数据是否相同是否相同


func Compare(val1,val2 string) bool {
   indexf :=strings.Index(val1,".") + 4
   indexs :=strings.Index(val2,".") + 4
   if indexs != indexf {
      return false
   }else {
      if val1[0:indexf] == val2[0:indexs]{
         return true
      }else {
         return false
      }
   }
}

补充:golang 浮点数操作

数据库中金额元存储的数据结构使用的是decimal(15,2),Golang中使用float64保存变量内容。通过转换将 float64 -> int64

最简单的方式:int64(float64 * 100),但是由于浮点数在计算机内的表示方式问题导致有一部分数据会出现问题,

例如:


var v = 67.6  
fmt.Println(int64(v *100)) 输出结果为:6759
 

解决方法:

使用"github.com/shopspring/decimal"包,将对浮点数进行精确计算,例如:


f1 := decimal.NewFromFloat(v)
f2 := decimal.NewFromFloat(100)
fmt.Println(f1.Mul(f2).IntPart()) 输出结果为6760

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: golang 比较浮点数的大小方式

本文链接: https://www.lsjlt.com/news/125071.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • golang 比较浮点数的大小方式
    Golang浮点数比较和运算会出现误差。 浮点数储存至内存中时,2的-1、-2……-n次方不能精确的表示小数部分,所以再把这个数从地址中取出来进行计算就出现了偏差。 packag...
    99+
    2022-11-12
  • Shell脚本处理浮点数的运算和比较方式
    这篇文章主要讲解了“Shell脚本处理浮点数的运算和比较方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shell脚本处理浮点数的运算和比较方式”吧!通过top命令看到的进程的CPU、内存...
    99+
    2023-06-09
  • javascript比较数字大小的方法
    这篇文章主要介绍“javascript比较数字大小的方法”,在日常操作中,相信很多人在javascript比较数字大小的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ja...
    99+
    2022-10-19
  • Shell中比较大小的方法
    本篇内容主要讲解“Shell中比较大小的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Shell中比较大小的方法”吧!代码如下:#!/bin/bashif [ $1 -gt $2 ]then...
    99+
    2023-06-09
  • python怎么比较数组中数的大小
    在 Python 中,可以使用内置的 `max()` 和 `min()` 函数来比较数组中数的大小。这两个函数分别返回数组中的最大值...
    99+
    2023-09-29
    python
  • 微信小程序比较两个数大小的实现方法
    目录效果图wxml代码wxss代码index.js代码总结效果图 wxml代码 <!--index.wxml--> <view class="demo-box"...
    99+
    2022-11-13
  • java date比较大小的方法是什么
    在Java中,可以使用`compareTo()`方法来比较两个`Date`对象的大小。`compareTo()`方法返回一个整数值,...
    99+
    2023-09-14
    java
  • java string比较大小的方法是什么
    在Java中,可以使用以下几种方法来比较字符串的大小:1. 使用`equals()`方法:`equals()`方法比较两个字符串是否...
    99+
    2023-09-04
    java
  • vbscript 中怎么比较三个数的大小
    今天就跟大家聊聊有关vbscript 中怎么比较三个数的大小,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码如下:dim a,b,c a =inputbox ("请输入0...
    99+
    2023-06-08
  • Shell脚本处理浮点数的运算和比较实例
    通过top命令看到的进程的CPU、内存的使用率的百分比是一个浮点数,我需要在写脚本时对其进行处理,所以学习了一些,总结如下。 其实,Shell(这里是Bash)本身不具备处理浮点计算的能力,但是可以使用“b...
    99+
    2022-06-04
    脚本 实例 浮点数
  • MySQL数据库中varchar类型的数字比较大小的方法
    创建测试表 -- ---------------------------- -- Table structure for check_test -- --------------...
    99+
    2022-11-12
  • python使用cmp函数比较两个数的大小
    在python使用cmp()函数比较两个数大小的方法cmp:cmp(x,y)函数的作用是用于比较2个对象,如 x < y,则返回 -1; x == y,则返回 0; x > y,则返回 1。cmp(x,y)函数语法:cmp( x, y )c...
    99+
    2022-10-17
  • C语言怎么比较四个数的大小
    这篇文章主要讲解了“C语言怎么比较四个数的大小”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C语言怎么比较四个数的大小”吧!四个数比较大小可以用三目运算符(四个数以上用其他排序法):#inc...
    99+
    2023-06-17
  • python 字符串比较忽略大小写的方法
    A.正则表达式,使用IGNORECASE标志 >>> import re >>> m = re.search('multi', 'A mUltiCased string', re.IGNOREC...
    99+
    2023-01-31
    大小写 字符串 方法
  • java比较字符不区分大小写的方法
    equalsIgnoreCase() 方法用于将字符串与指定的对象比较,不考虑大小写。(推荐:java视频教程)语法public boolean equalsIgnoreCase(String anotherString)参数:anObje...
    99+
    2019-08-15
    java
  • 浮点数乘法和整形乘除法的效率经验比较
    目录前言测试1. 整形除法和浮点数乘法2. 把整形预先乘10来比较3. 单次浮点乘法和整形乘法比较总结前言 最近在做一个比赛,包含了如下内容: 环上边的转账金额需要为前一条边的转账金...
    99+
    2022-11-13
  • 数据库连接池的大小设置成多大比较好
    本篇内容主要讲解“数据库连接池的大小设置成多大比较好”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库连接池的大小设置成多大比较好”吧!  一、数据库连接池的...
    99+
    2022-10-18
  • golang中json小谈之字符串转浮点数的操作
    有时会有这种需求,将一个json数据形如: {"x":"golang", "y":"520.1314"} 中的y反序列化为浮点类型,如果这样写: package main ...
    99+
    2022-11-11
  • MySQL数据库中varchar类型的数字比较大小的方法是什么
    这篇文章主要介绍“MySQL数据库中varchar类型的数字比较大小的方法是什么”,在日常操作中,相信很多人在MySQL数据库中varchar类型的数字比较大小的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-25
  • Java中两个字符串进行大小比较的方法
    目录一:大小比较:使用 String.compareTo 方法二:字符串是否相等比较下面介绍下java中两个字符串如何比较大小一:大小比较:使用 String.compareTo 方...
    99+
    2022-12-14
    Java比较字符串大小 Java字符串大小比较
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作