热门 购物 团购 理财 文学 人才 体育 汽车 游戏 软件 军事 音乐 视频 媒体 论坛 博客 银行 交友 综合
一起购 唯品会 梦芭莎 趣玩网 凡客诚品 麦考林 乐淘鞋网 弗克尚品 绿盒子 俏物悄语 新蛋网 当当网 玛萨玛索
拉手网 糯米网 爱帮团 聚划算 58团购 美团网 QQ团购 大众点评团 窝窝团 美淘网 满座网 团宝网 饭统饭团
起点网 榕树下 小说阅读 潇湘书院 红袖添香 幻剑书盟 新浪游戏 太平洋游戏 163邮箱 中国游戏 游戏中国 霏凡软件 铁血军事
Health Sitology Family Finance Appliances Shopping Clothing Education Legal Rituals Beauty Property Travel Pet Medical Cyclopedia History Military Computers Sports Job Anecdote Geographic Mixed Entertain Literature Emotion Agriculture
/**
 * 任何人任何机构皆可用于任何项目,此软件免费无需书面授权
 * 在软件和软件的所有副本中都必须包含版权声明和软件相关注解
 *
 * 模块: number_format.c
 * 简述: 对浮点数进行四舍五入 以千位分隔符方式格式化一个数字
 * 作者: woods zhang  ->  hoojar@163.com -> http://www.hecart.com/
 * 版权: 2006-2018, 张树林 拥有此源码所有版权 (MIT许可协议)
 * Copyright 2006-2018, Woods Zhang All Rights Reserved (The MIT License)
 */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <ctype.h>

static inline double intpow10(int power)
{
    static const double powers[] =
    {
        1e0,  1e1,  1e2,  1e3,  1e4,  1e5,  1e6,  1e7,
        1e8,  1e9,  1e10, 1e11, 1e12, 1e13, 1e14, 1e15,
        1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22
    };

    /* Not in lookup table */
    if (power < 0 || power > 22)
    {
        return pow(10.0, (double)power);
    }
    return powers[power];
}

/**
 * 对浮点数进行四舍五入
 *
 * @param val 要处理的值
 * @param dec 可选的十进制小数点后数字的数目
 * @return 返回将 val 根据指定精度 precision(十进制小数点后数字的数目)进行四舍五入的结果。precision 也可以是负数或零(默认值)
 */
double php_round(double val, int dec)
{
    if (dec <= 0)
    {
        return round(val);
    }

    dec = intpow10(dec);
    return round(val * dec) / dec;
}

/**
 * 以千位分隔符方式格式化一个数字
 *
 * @param haystack 执行替换字符串
 * @return 执行成功后的字符串
 */
char *number_format(double d, int dec, char dec_point, char thousand_sep)
{
    int point = 0;
    static char fmt[50] = {0};
    sprintf(fmt, "%f", php_round(d, dec));

    char *str = fmt;
    while (*str)
    {
        if (*str == '.')
        {
            *str = dec_point;
            point = 1;
        }
        else if (point > 0)
        {
            if (point > dec)
            {
                *str = 0;
                break;
            }
            point++;
        }
        str++;
    }

    point = 0;
    int p = 0, i = strlen(fmt);
    while (*(--str))
    {
        --i;
        if (point > 0)
        {
            if (point % 3 == 0)
            {
                for (p = strlen(fmt); p >= i; --p)
                {
                    *(fmt + p + 1) = *(fmt + p);
                }
                *(fmt + i) = thousand_sep;
            }
            point++;
        }
        else if (*str == dec_point)
        {
            point = 1;
        }
    }

    return (fmt[0] == ',') ? fmt + 1 : fmt;
}

int main(void)
{
    double num = 123456.4569;
    printf("round dec 2 (%f): %f ", num, php_round(num, 2));
    printf("round dec 3 (%f): %f ", num, php_round(num, 3));
    printf("number_format: %s ", number_format(num, 2, '.', ','));
    printf("number_format: %s ", number_format(num, 3, '.', ','));
    return 0;
}
Reply content :
Photo link :
防火分隔物起什么作用?它有哪些类型?在建筑物内设置耐火极限较高的防火分隔物,一旦发生火灾时,可以起到阻止火势蔓延的作用。防火分隔物是针对建筑物的不同部位和火势蔓延的途径…  Details
作者:盛森 1960年,为了研究人与人之间的联系,社会学家史泰林·米勒格曼设计了一个实验。他从美国中部内布拉斯加州的奥马哈市,随机选出160个普通人,每人发给一个邮包。邮包…  Details
/** * 任何人任何机构皆可用于任何项目,此软件免费无需书面授权 * 在软件和软件的所有副本中都必须包含版权声明和软件相关注解 * * 模块: number_format.c * 简述: 对浮点…  Details
分隔两地的爱情你们怎么看呢?无所谓,只是时间问题,我们目前就是此情况,我们有信息,只要我们的爱情能经受住考验经的起考验的两个人就会在一起,经不起考验的就会各自飞.我倒认为在一起…  Details
如果你与女友长期分隔两地, 你又不能经常回去看她, 她天天想你到有点忧郁倾向了, 你会怎么做?马上飞回去给她一个惊喜! 再想办法,调到一块!其中一方放弃目前的工作,去另一方所在地工作…  Details
巧妙地分隔,会给你的居室增加空间层次与深度感,现介绍四种方法: 一、利用挂幔分隔。由于挂幔所用空间仅薄薄一层,且经常可更换、洗涤,保持清洁,所以更经济、方便、实用。它…  Details