精华内容
下载资源
问答
  • double转int
    万次阅读
    2019-01-24 09:29:03

    关于double转int类型,在本来的认知中,以为任何情况强转可以搞定一切,但在实际应用时发现不然,需求是需要从excel表中读出xx.xx这样的数字信息,且需要在此数值*100后作为查询条件去db查询,这就需要精确性了,对于基础小白来讲,还是做个笔记记下吧,先看强转的例子:

            Double a = 2.3 * 100;
            int i = new Double(a).intValue();
            System.out.println(i);

    输出结果:229

    ok,很明显不是我们要的结果,从上面可以看出,在转换时发生了精度丢失问题,转为int类型会把后面的小数点全部砍掉,不同数据类型转换过程中会有这个问题,原因是计算机是2进制的,针对这种情况的控制方法可以使用DecimalFormat来解决:

    new DecimalFormat("0").format(a)

    返回的是String类型,控制台输出:230,具体需要保留几位可以通过DecimalFormat来进行设置。

    更多相关内容
  • double转int类型

    千次阅读 2020-06-07 23:12:55
    double转int类型 方法一 double double1 = 111.111; int int1= new Double(double1).intValue(); System.out.println(int1); 方法二 double double2= 222.222; int int2 = (int)Math.round(double2); int int22 = ...

    double转int类型

    方法一

    double double1 = 111.111;
    int int1= new Double(double1).intValue();
    System.out.println(int1);
    

    方法二

    double double2= 222.222;
    int int2 = (int)Math.round(double2);
    int int22 = (int)Math.ceil(double2);
    int int222 = (int)Math.floor(double2);
    System.out.println("四舍五入取整" + int2);
    System.out.println(“向上取整” + int22);
    System.out.println(“向下取整” + int222);
    

    方法三

    但是上面两种在特殊情况下, 会损失精度
    eg: double d1 = 3.39
    	 double d1 = 8.29
     	 double d1 = 18.31
     
    如何让解决损失精度的问题
    double double3 = 33.33;
    String format =  new DecimalFormat("#").format(double3);
    System.out.println(format);
    
    展开全文
  • 【c++】double转int精度丢失问题

    千次阅读 2021-12-16 23:37:23
    } 输出结果:a: 74.49 b: 7448 原因:double转int精度丢失 解决方法 #include #include int main() { double a = 74.49; int b = std::round(a * 100); std::cout ; return 0; } 采用四舍五入的方式取整数,适用于...
    #include <iostream>
    
    int main()
    {
       double a = 74.49;
       int b = a * 100;
    
       std::cout << "a: " << a << " b: " << b << std::endl;
       return 0;
    }
    
    输出结果:a: 74.49 b: 7448
    

    原因:double转int精度丢失

    解决方法<一>

    #include <iostream>
    #include <cmath>
    int main()
    {
       double a = 74.49;
       int b = std::round(a * 100);
    
       std::cout << "a: " << a << " b: " << b << std::endl;
       return 0;
    }
    

    采用四舍五入的方式取整数,适用于仅仅需要取整数,且对小数点后第一位大于5而进位影响整数大小的情况

    输出结果:a: 74.49 b: 7449
    

    解决方法<二>

    #include <iostream>
    #include <cmath>
    #include <string>
    int main()
    {
       double a = 74.49;
       std::string str = std::to_string(a * 100);
       int b = atoi(str.c_str());
    
       std::cout << "a: " << a << " b: " << b << std::endl;
       return 0;
    }
    

    转换成字符串过度一下

    输出结果:a: 74.49 b: 7449
    

    菜鸟一枚,希望各位大佬不吝赐教

    展开全文
  • double转int类型会丢失精度,今天我们就回答为什么会丢失精度,以及最好的解决方案.

    问题

    问题出自一个价格的转换需要将double类型转换(元)为integer类型(单位分)的数.

    $salePrice = 10.2;
    $price =(int) ($salePrice  * 100); // 1019
    

    虽然少了一分钱,但是对于这种问题的严重性,每个用户少付款一分钱,虽然说平台用户少,但对于对账会触发报警,甚至不能下单因为实际付款额与售价不等.

    接下来我们先从计算机如何存储二进制数字说起.

    二进制数字与十进制数字转换

    十进制转二进制

    整数部分 --> 转为二进制
    小数点不动
    小数部分 --> 转为二进制

    这里重点说下:小数部分转换

    0.25转换为二进制如下:

    0.25 * 2 = 0.5   // 0 取整数位如果为1取1,这里为0取0,小数部分不为0所以 拿0.5去下一步
    0.5*2     =1.0     // 1 小数部分为0 结束计算
    

    10.25就可以表示为 1010.01

    二进制转十进制

    小数部分转换:

    0.25

    0 1

    得出小数部分算法

    0*2^{-1} +  1*2^{-2}
    

    double类型在内存空间模型

    众所周知,php使用C语言实现,浮点类型在zval中是double.

    符号位     11位 指数      52位尾数
    0      0000 0000 000     000.....000
    

    以10.25为例:

    1010.01 => 转换为

    1.01001 * 2^{3}
    
    • 将符号存储至符号位,0整数,1负数
    • 将2的指数加中间数存入指数位:3+127=130
    • 将小数位存储到52位尾数位当中.
    • 整数1不需要存储.

    中间数:为了表示负指数,所以提出了一个中间数的概念. 中间数:2^n-1 n为指数位数.
    所以double类型的中间数为1023, 而float类型为127.
    例如指数为-7那么, 127 + (-7)= 120 -> 01111000,读取时候还得减去127,得出真实值.
    中间数可以理解为一个符号位,表示指数的符号.
    中间数全为1,尾数位为全为0表示无穷大
    中间数全为1,尾数位不全为0表示NaN
    中间数全为0,尾数位全为0表示0

    因此得到内存模型为:

    符号位     11位 指数      52位尾数位
    0      1000 0000 011     01001 0......000
    

    从内存模型当中读取数据时:

    符号位     11位 指数                              52位尾数位
    0      1000 0000 011                            01001 0......000
    +     130-127 = 0000 0000 011= 3    
    尾数位前补1和. => 1.01001 
    将小数点右移指数位个数(减去中间数后如果指数位最低位为1则左移) => 1010.01
    按照二进制转十进制规则得出:10.25
    

    解决方案

    PHP中可以使用bcmath库,避免精度丢失.

    两数相乘可以用bcmul这个函数.

    (int)bcmul(10.2, 100) =>  1020  
    

    使用bccomp准确比较两个任意精度类型.

    其他语言参照相关的库,C语言中也有bcmath库的实现.

    在涉及到跟金额相关的业务时候推荐最好这么做,避免产生类似不安全的问题.

    展开全文
  • 类型转换是什么? 不同数据类型间的转换,如:将int类型转换为string类型 为什么需要类型转换? 从控制台接收到的用户输入的内容都是string类型,如果要进行计算,就需要将接收到...double int num1 = 10; ...
  • C#: double转int , String转int

    千次阅读 2018-12-08 11:49:51
    该程序是在控制台程序中测试 ,下面分别介绍两种方法,代码如下: using System; namespace ConsoleApp17 { class Program { static void Main(string[] args) ... //doubleint //A方法: Convert.Toint...
  • System.out.println("向上取整:" + (int) Math.ceil(96.1));// 97 (去掉小数凑整:不管小数是多少,都进一) System.out.println("向下取整" + (int) Math.floor(96.8));// 96 (去掉小数凑整:不论小数是多少,都不...
  • double转int问题

    千次阅读 2018-09-03 16:15:34
    一、代码实现 ... public class TTTT { public static void main(String[] args) { double d =1.76; System.out.println((int)d); double f =1.16; System.out.println((int)f); } ...
  • public class App { public static void main(String... System.out.println("向上取整:" + (int) Math.ceil(86.1));// 87 (去掉小数凑整:不管小数是多少,都进一) System.out.println("向下取整" + (int) Math.fl...
  • //自写个四舍五入函数 //其中floor()是向下取整函数 int doubleToInt(double d) { double intPart = floor(d); if ((d - intPart) >= (double)0.5) { return (intPart + 1); } else { ret...
  • floor()函数:向下取整,取小于等于这个数的最大整数 ...extension Double { func intValue() -&amp;amp;gt; Int { return Int(self) } func stringIntValue() -&amp;amp;gt; String { ...
  • Java将double转换为int

    千次阅读 2021-04-16 02:23:41
    本文概述我们可以使用类型转换在Java中将double转换为int。要将double数据类型转换为int, 我们需要执行类型转换。Java中的类型转换通过类型转换运算符(数据类型)执行。在这里, 我们将学习如何将double基本类型转换为...
  • java double类型保留位数、double转int

    万次阅读 2017-12-12 16:27:05
    1.double保留小数点后一位 DecimalFormat df = new DecimalFormat("#.0"); df.format(0.99); 同理,保留小数点后两位 DecimalFormat df = new DecimalFormat("#.00"); df.format(0.99); 同理保留小数点后零位 ...
  • 如何在Java中将double转换为int

    万次阅读 多人点赞 2021-03-09 10:54:46
    在本文中,我们将看到如何将double转换为int。 在Java编程中,您将有一个double原语值(例如82.14),但是要执行进一步的操作,您需要一个int值(例如82),所以让我们看看如何在Java中将double转换为int。 您可以...
  • double转int精度丢失问题

    千次阅读 2015-05-10 18:19:45
    在做学校的acm题时遇到这么一个问题,多余部分已省去,问题部分为: 输入正整数n,取2的n次方的最高位。 由M=2^n,两边取以10为底的对数,logM=nlog2=y ...则pow(10,y的小数部分)即为所求...int high(long long int
  • c#如何将double转换成int

    千次阅读 2021-05-27 17:49:50
    仅作为记录,大佬请跳过。 用(int)X 先初始化变量,再用 int a, b, c, d = 0; a = (int)X;b = (int)Y;c = (int)Width;d = (int)Height;
  • 要将double转换为int并将其四舍五入为最接近的整数(即与典型的(int)(1.8)and 不同(int)(1.2),它们都将“向下舍入”为0并返回1),只需在上加上0.5doubleint,即可将其类型转换为。例如,如果我们有double a = 1.2;...
  • 如何将int转换成double

    千次阅读 2020-12-16 04:51:33
    展开全部将int转换成double可以使用强制62616964757a686964616fe59b9ee7ad9431333431353431类型转换、自动类型转换两种方式。1、强制类型转换强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)...
  • double转int时精度不一致问题

    千次阅读 2015-05-03 19:49:32
    float和double类型的主要设计目的是为了科学计算和工程计算。它们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求...
  • java---double转int的问题

    万次阅读 2014-07-31 11:18:10
    不进行四舍五入操作: (int)x 进行四舍五入操作: Integer.parseInt(new java.text.DecimalFormat("0").format(x))
  • Given a double type of variable, we have to convert it into an integer in C#. 给定双重类型的变量,我们必须在C#中将其转换为... int_variable = (int)double_variable; Example: 例: Input: double...
  • 今天在计算数据的时候,我用c++算数的时候出现了点问题,如下图,就是double 类型的d取值为1,然后N为整型20,densityC为宏定义的0.5, 结果算出来1.0\*20\*0.5得出数值为9???这计算机不拿我当人呢,请问大佬们...
  • doubleint的快速转换

    千次阅读 2017-11-10 11:05:10
    doubleint的快速转换  (2014-01-19 13:39:56) 转载▼ 标签:  double   long   数值类型转换   快速   图形表示用double,显示用int,很常规的提高效率的小...
  • double int 的问题

    2016-01-07 13:11:36
    程序如下: #include int main() { double f_temp = 1.001 * 10000; int i_temp = f_temp; printf("%f, %d\n", f_temp, i_temp); return 0; } 为何编译运行输出: 10010.000000, 10009 编译器为: g++ (Ubuntu 5.2.1-...
  • 当在int(假设int是32位的)、float和double格式之间进行强制类型转换时,原则如下:从 int 转换成 float,数字不会溢出,但是可能被舍入。从 int、float 转换成 double,能够保留精确的数值。因为 double 有更大的...
  • 展开全部double类型可以强制转换成int类型。可以通过显式强制类型转换、隐式强制类型转换两种方式进行转换。1、显32313133353236313431303231363533e59b9ee7ad9431333431353364式强制类型转换格式为:int b = (int) ...
  • double a=7.1,c=7.50,f=7.11; int b,d,e; b=a/0.1; d=c/0.01; e=f/0.01; printf("%d\n%d\n%d\n",b,d,e); return 0; } 为什么结果和我想象的不一样啊,b,d不正常,但是e为什么又正常了阿??? 求解阿!
  • java double 转为int小数位处理

    千次阅读 2019-11-24 11:28:24
    java double 转为int package com.qiyuan.util; import java.math.BigDecimal; import java.text.DecimalFormat; public class GetIntUtil { /** * (1)四舍五入把double转化int整型,0.5进一,小于0.5不进一...
  • 就是“从double转换到int,可能丢失数据”这类警告 这意味着内部出现强制数值转换,特别是在数值优化迭代求解中,极为容易出现解的异常 (上一步的变量值被截断了,下一步计算就忽视了它,不断迭代中误差变大) 解决...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,808,063
精华内容 723,225
关键字:

double转int

友情链接: 921957200shuiguoshibie.zip