精华内容
下载资源
问答
  • 哎呦,这个程序真是快调死我了,各种问题,小白成长的路上艰难险阻不断啊。。。 先来说说我的思路吧: 思路1:就是肯定是循环小数比较难嘛,然后纯循环比较好解决,就是分母是9,99,999,9999....。...

    哎呦,这个程序真是快调死我了,各种问题,小白成长的路上艰难险阻不断啊。。。

    先来说说我的思路吧:

    思路1:就是肯定是循环小数比较难嘛,然后纯循环比较好解决,就是分母是9,99,999,9999.。。。以此类推,混循环小数就是90啊,900,9900之类的(9的个数是小数循环体的个数,0的个数是非循环体的小数位数),但是到1/19的时候就超了int的上限了,于是只能放弃。

    思路二:就是利用除法的那个性质,看什么时候会有相同的余数,然后再处理一下下就好了。可是这个在int的上下界的除法真是困扰了我很久,int和long的转化啊,本来想用abs把负数转化成正数,可是负数的上限比正数大一个,所以只能用long,啊。。调了一天终于搞定了。

    public class Solution {
              public String fractionToDecimal(int numerator, int denominator){
                            String s="";
                            if (numerator%denominator==0) {
                                long num=(long)numerator/denominator;
                                s=s+num;
                                return s;
                            }
                            Map<Integer, Integer> m1 = new HashMap<Integer, Integer>();
                            int i=0;
                            int b=numerator;
                            String flag="";
                            long numerator1=0L;
                            if (numerator<0 && denominator>0) {
                                flag="-";
                            }
                            if (numerator>0 && denominator<0) {
                                flag="-";
                            }
    
                            int[] shang=new int[1000];
                            int zheng=Math.abs(numerator/denominator);
                            int zheng1=numerator/denominator;
                            numerator=numerator- zheng1*denominator;
                            numerator1=(long)numerator;
                            // denominator=Math.abs(denominator);
                            System.out.println(zheng+"  "+ numerator+"  "+ denominator);
                            s="";
                            int num=0;
                            while(true){    
                            numerator1=(long)numerator*10;
                            shang[i]=(int)(numerator1/(long)denominator);
                            numerator1=numerator1- (long)(denominator* shang[i]);
                            numerator=(int)numerator1;
                            if (m1.containsValue(numerator)) {
                                m1.put(i,numerator);
                                break; 
                            }
                            m1.put(i,numerator);
                            i++;
                        }
    
                        for (int j=0;j<=i ;j++ ) {
                            if (shang[j]<0) {
                                shang[j]=-shang[j];
                            }
                            s=s+shang[j];
                        }
                        int len=s.length();
                        if (s.charAt(len-1)=='0' && m1.get(i)==0) {
                            s=s.substring(0,len-1);
                            System.out.println(s);
                            String s1=flag+zheng+"."+s;
                              return s1;
                        }
    
                        Set<Integer> set = m1.keySet(); 
                        for (int j:set) {
                            // System.out.println(j);
                            if (m1.get(j)-m1.get(i)==0) { // it doesn't work when I input m1.get(j)==m1.get(i) why???
                                // System.out.println(j);
                                num=j;
                                break;        
                            }
                        
                        } 
    
                        if (s.substring(num,num+1).equals(s.substring(len-1,len))) {
                            s="("+s.substring(0,len-1)+")";
                            String s1=flag+zheng+"."+s;
                              return s1;
                        }
                        if (!s.substring(num,num+1).equals(s.substring(len-1,len))) {
                            s=s.substring(0,num+1)+"("+s.substring(num+1,len)+")"; 
                            String s1=flag+zheng+"."+s;
                            System.out.println(m1);
                              return s1;  
                        }
                        System.out.println(s);
                        return "";
                        }
    
    }


    展开全文
  • 实现除法运算,结果返回为String类型的浮点数。必须要考虑的就是循环小数,当余数跟之前重复的时候就出现了循环小数。可以根据这个来设计我们的算法。

    Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.

    If the fractional part is repeating, enclose the repeating part in parentheses.

    For example,

    • Given numerator = 1, denominator = 2, return "0.5".
    • Given numerator = 2, denominator = 1, return "2".

    • Given numerator = 2, denominator = 3, return "0.(6)" 
    题目分析:实现整数除法,返回值有可能是循环小数。

                     首先,考虑到整数除法是怎么实现的,依次向下除,取余。那么,什么时候出现循环呢?当余数重复的时候出现循环。知道这个规则就可以很顺利的设计我们的算法了。就是要注意很多细节的处理,我都在代码中注明了。

         

    /**实现除法运算,结果返回为String类型的浮点数。
     * 必须要考虑的就是循环小数,当余数跟之前重复的时候就出现了循环小数
     * 可以根据这个来设计我们的算法*/
    public String fractionToDecimal(int numerator, int denominator) {
    	
    	   /**首先考虑除数为0,被除数为0的特殊情况*/
    	   if(numerator==0) return "0";
    	   if(denominator==0) return String.valueOf(Integer.MAX_VALUE);
    	   
    	   /**其次考虑两个数的符号不一致的情况*/
    	   String res=new String();
    	   if((numerator<0)^(denominator<0))
    		   res=res+"-";
    	   
    	   /**考虑到Int类型为-2^32的溢出,所以转化为long,一定要先转换再求绝对值
    	    * 既然已经考虑了符号,就可以直接转为绝对值**/
    	   long num=Math.abs((long)numerator);
    	   long den=Math.abs((long)denominator);
    	   
    	   /**区别整数部分和小数部分*/
    	   long ren=num/den;
    	   long rem=num%den;
    	   res=res+String.valueOf(ren);
    	   
    	   /**没有小数部分,直接返回**/
    	   if(rem==0) return res;
    	   
    	   
    	   res+='.';
    	   /**采用map来存储余数,以及该余数对应的小数的位置,这样方便我们为循环小数打括号*/
    	   Map<Long,Integer> map=new HashMap<Long,Integer>();
    	   int beg=res.length();
    	   while(rem>0)
    	   {
    		   rem=rem*10;
    		   ren=rem/den;
    		   /**如果出现重复,需要截取出循环的部分打括号**/
    		   if(map.containsKey(rem))
    		   {
    			   /**循环前**/
    			   String part1=res.substring(0,map.get(rem));
    			   /** 循环后*/
    			   String part2=res.substring(map.get(rem));
    			   res=part1+"("+part2+")";
    			   break;
    		   }
    		   else
    		   {
    			   res+=String.valueOf(ren);
    			   map.put(rem, beg);
    		   }
    		   /**更新位置计数和余数**/
    		   beg++;
    		   rem=rem%den;
    		   
    	   }
    	   
    		 return res;  
            
        }


    展开全文
  • decimaljava怎么用?

    千次阅读 2019-12-24 19:49:24
    自己在计算费用时候,因为用了Double类型造成结果...一,decimaljava中的用BigDecimal表示 @Column(length=10 ,scale=2) // length表示长度 , scale表示小数点后位数 private BigDecimal money; 二,BigDecima...

    自己在计算费用时候,因为用了Double类型造成结果与期望值有偏差,所以改用decimal类型进行计算

    一,decimal在java中的用BigDecimal表示

         @Column(length=10 ,scale=2)    // length表示长度 , scale表示小数点后位数
         private BigDecimal money;
    

    二,BigDecimal类型与string,Double类型的相互转换

    1. String类型转成BigDecimal类型:
         BigDecimal bd = new BigDecimal("xxx");
         String str = bd.toString();
    
    2.BigDecimal类型转成String类型:
         BigDecimal bd = new BigDecimal("xxx");
    	 String str = bd.toString();
    
    3.将double类型转化为BigDecimal
    	Double a=1.23;
    	BigDecimal c = BigDecimal.valueOf(a);
    	不能使用:
    	BigDecimal decimal= new BigDecimal(a);
    
    4.将BigDecimal类型转化为double
    	BigDecimal bd;
    	double d = bd.doubleValue();
    

    三,BigDecimal操作运算加减乘除

     	BigDecimal num1 = new BigDecimal("100");  
    	BigDecimal num2 = new BigDecimal("50");
    	//加法
    	BigDecimal result1 = num1.add(num2);        
        //减法 
        BigDecimal result2 = num1.subtract(num2);
    	//乘法
    	BigDecimal result3 = num1.multiply(num2);      
        //除法
    	BigDecimal result4 = num1.divide(num2);
    
    展开全文
  • mysql的decimalJava的BigDecimal用法

    千次阅读 2019-05-07 18:23:18
    mysql的decimaljava中BigDecimal是对应关系 MySQL中 : 精度类型用DECIMAL来保留准确的精度类型,**对于常用的货币数据,钱~** column_name DECIMAL(P, D); P为有效数字的精度,D为小数点后的位数~ ...

    mysql的decimal和java中BigDecimal是对应关系

    MySQL中 :

    精度类型用DECIMAL来保留准确的精度类型, 对于常用的货币数据,钱~

    column_name DECIMAL(P, D);

    • P为有效数字的精度,D为小数点后的位数~

    • D不写默认是0,P不写默认是10,那么就成这样了~ column_name DECIMAL;

    Java中:

    那么在数据库中存完了,接着就是取数据了~

    开发中我们如果直接拿过来用的话那绝对就会出错了

    System.out.println((1.01 + 2.02) == 3.03 );
    System.out.println(new Float(1.01 + 2.02).equals(3.03) );
    System.out.println(new Float(1.01 + 2.02) == (3.03) );
    System.out.println(new Float(1.01 + 2.02) == new Float(3.03) );
    

    以上结果都是错~, 并不是等于3.03,实际上输出的是3.0300000002,无论是float还是double浮点数,都会失去精度,所以要用到BigDecimal了

    创建BigDecimal主要两种方法:

    BigDecimal b1 = new BigDecimal("1.34");//1.34  
    BigDecimal b2 = BigDecimal.valueOf(1.34);//1.34  
    

    而直接new的话,会丢失精度

    BigDecimal one1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625 
    

    除了上述两种,特殊的0, 1, 10可以写成:

    BigDecimal zero = BigDecimal.ZERO;  
    BigDecimal one = BigDecimal.ONE;  
    BigDecimal ten = BigDecimal.TEN;  
    

    比较一下BigDecimal.ZERO、new BigDecimal(“0”)、BigDecimal.valueOf(0)这三者,equals都是true,==的话new BigDecimal(“0”)就不用看了都new了,而BigDecimal.ZERO == BigDecimal.ZERO为true。

    查看源码知道:10以内的对象都是同一个。

    关于加减乘除

    public static double add(double value1,double value2){  
        BigDecimal b1 = new BigDecimal(Double.toString(value1));  
        BigDecimal b2 = new BigDecimal(Double.toString(value2));  
        return b1.add(b2).doubleValue();  
    }  
    

    BigDecimal的运算都没有对原值进行操作,而是返回一个新的BigDecimal对象,这点可能有些小伙伴会搞错要注意一下。

    展开全文
  • Java-Decimal

    千次阅读 2018-10-08 18:16:00
    1 import java.math.BigDecimal; 2 import java.text.DecimalFormat; 3 import java.text.NumberFormat; 4 5 public class TestDecimal { 6 public static void main(String[] args) { 7 ...
  • java decimal 进位

    2013-05-10 17:23:01
    今天终于把浮点数的格式化,以及进位做了一个比较详细的了解。   比如计算出来一个结果是:34576543.3456。 ...现在客户需要的格式是各种各样的,假设是¥34,576,543.35 ...这个里面用到2个知识点,一个是浮点数的...
  • java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法 写一个JAVA程序的时候出现了异常:java.lang.ArithmeticException: Non-terminating ...
  • Java hex decimal 转换

    2019-09-25 07:52:27
    package com.tv.ui.metro.utils;import java.math.BigInteger;/** * Created by Administrator on 16-4-9. */public class NumberConverter { public static Long HexToLongDecimal(String s) { retu...
  • Java_Decimal

    2012-05-31 11:46:00
    字段摘要staticBigDecimalONE值为1 ,标度为0。staticintROUND_CEILING接近正无穷大的舍入模式。staticintROUND_DOWN接近零的舍入模式。staticintROUND_FLOOR接近负无穷大的舍入模式。staticintRO...
  • DECIMAL和NUMERIC在java中用BigDecimal接收

    千次阅读 2019-02-16 11:14:13
    DECIMAL和NUMERIC在java中用BigDecimal接收 sql中数字类型DECIMAL和NUMERIC在java中可以用BigDecimal类型接收
  • java.lang.ArithmeticException: Non-terminating decimal expansion报错的原因是因为不能被整除 price=sumPrice.divide(number).setScale(2,BigDecimal.ROUND_HALF_UP);//修改前 price=sumPrice.divide(number,2,...
  • To create a ta4j Tick I need to convert the values into Decimal.java with the valueOf(String): <pre><code> BigDecimal low; // ohlc data ... // Create a Tick Decimal.valueOf(low.toString()) ... ...
  • java decimal to percentage

    2013-04-07 17:11:42
    就是简单实用了,才工作中应用到了,怕忘记就发出来。 主要功能很简单,但是处理起来就是很繁琐,说明以下,当拿到一个拿到一个小数点(double)类型,然后进行转换百分比。...import java.text.Deci
  • Given two integers representing the numerator and denominator of a fraction, return the fraction in string format. If the fractional part is repeating, enclose the repeating part in parentheses.
  • 示例1 问, 结果是多少? 0.01? No! 结果是0.009999999999999998! 为什么会这样呢? 因为float和double都是浮点数, 都有取值范围, 都有精度范围. 浮点数与通常使用的小数不同, 使用中, 往往...mysql中的decimal , 在java
  • 前端(c#)调用后端(java)方法,后端方法参数若为BigDecimal类型,前端传参时要用decimal类型与之对应。 前端按钮事件(c#): private void confirmBtn_Click(object sender, RoutedEventArgs e) { this.service....
  • welcome to my blog LeetCode Top Interview ... Fraction to Recurring Decimal (Java版; Medium) 题目描述 Given two integers representing the numerator and denominator of a fraction, return the frac...
  • MySQL中字段名称对应的Java类型 ...decimal java.math.BigDecimal bit boolean VARCHAR String VARCHAR String VARCHAR String VARCHAR String 总结 以上就是对 JSTL 表达式取值的详细
  • Mybatis decimal映射到Java BigDecimal类型 科学计数法 环境:数据库使用的mysql,jdbcType为Decimal(32,8), 字段值为 0.00000000,在使用mybatis进行查询时,java类型使用BigDecimal接收,不幸的是它变为了科学计数...
  • 难 恶心 /* 思路 由于int 在操作的时候会越界 所以先把int转成long来操作 在取值的时候 整数部分是很容易得到的 所以先把整数部分存入partInt中; 小数部分需要每次把余数*10 在除 denominator, new 一个 ...
  • mysql中的decimal , 在java中的用BigDecimal表示的
  • 使用Decimal 类型,调用divide()方法做除法,一直报java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result num.divide(number); 原来JAVA中如果用BigDecimal...
  • Java固定的十进制算术,具有BigDecimal Java类的不同实现。
  • 字段order_amount在数据库中类型是decimal,属性名orderAmount类型是BigDecimal, BigDecimal类型=null,无法传递null给数据库,= ' '时,无法传递0给数据库   解决办法:!= null and orderAmount != ''">...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,968
精华内容 787
关键字:

decimaljava

java 订阅