社区首页 >问答首页 >将十进制数舍入到不为零的第一个小数点位置。

将十进制数舍入到不为零的第一个小数点位置。
EN

Stack Overflow用户
提问于 2018-09-21 01:43:27
回答 5查看 2.8K关注 0票数 21

我想把一个数字缩短到第一个重要数字,而不是0。后面的数字应该四舍五入。

示例:

代码语言:javascript
代码运行次数:0
复制
0.001 -> 0.001
0.00367 -> 0.004
0.00337 -> 0.003
0.000000564 -> 0.0000006
0.00000432907543029 ->  0.000004

目前,我有以下程序:

代码语言:javascript
代码运行次数:0
复制
if (value < (decimal) 0.01)
{
    value = Math.Round(value, 4);
}

注意:

  • 数字总是正数。
  • 有效数字的数目将始终为1。
  • 大于0.01的值总是四舍五入到小数点后两位,因此if < 0.01。

正如您可以从上面的例子中看到的,四舍五入到4个十进制位置可能是不够的,而且值可能有很大的差异。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-09-21 01:58:46

我将声明precision变量,并使用迭代将该变量乘以10与它未命中的原始值相乘,precision将添加1

然后使用precision变量是Math.Round第二个参数。

我对这个方法增加了一些修改,它不仅可以支持零小数点,还可以支持所有十进制数。

代码语言:javascript
代码运行次数:0
复制
static decimal RoundFirstSignificantDigit(decimal input) {

    if(input == 0)
       return input;

    int precision = 0;
    var val = input - Math.Round(input,0);
    while (Math.Abs(val) < 1)
    {
        val *= 10;
        precision++;
    }
    return Math.Round(input, precision);
}

我会为这个函数编写一个扩展方法。

代码语言:javascript
代码运行次数:0
复制
public static class FloatExtension
{
    public static decimal RoundFirstSignificantDigit(this decimal input)
    {
        if(input == 0)
            return input;

        int precision = 0;
        var val = input - Math.Round(input,0);
        while (Math.Abs(val) < 1)
        {
            val *= 10;
            precision++;
        }
        return Math.Round(input, precision);
    }
}   

然后用类似的

代码语言:javascript
代码运行次数:0
复制
decimal input = 0.00001;
input.RoundFirstSignificantDigit();

c# online

结果

代码语言:javascript
代码运行次数:0
复制
(-0.001m).RoundFirstSignificantDigit()                  -0.001
(-0.00367m).RoundFirstSignificantDigit()                -0.004
(0.000000564m).RoundFirstSignificantDigit()             0.0000006
(0.00000432907543029m).RoundFirstSignificantDigit()     0.000004
票数 21
EN

Stack Overflow用户

发布于 2018-09-21 02:01:18

像那样吗?

代码语言:javascript
代码运行次数:0
复制
    public decimal SpecialRound(decimal value) 
    {
        int posDot = value.ToString().IndexOf('.'); // Maybe use something about cultural (in Fr it's ",")
        if(posDot == -1)
            return value;

        int posFirstNumber = value.ToString().IndexOfAny(new char[9] {'1', '2', '3', '4', '5', '6', '7', '8', '9'}, posDot);

        return Math.Round(value, posFirstNumber);
    }
票数 2
EN

Stack Overflow用户

发布于 2018-09-21 02:04:40

代码语言:javascript
代码运行次数:0
复制
var value = 0.000000564;

int cnt = 0;
bool hitNum = false;
var tempVal = value;
while (!hitNum)
{
    if(tempVal > 1)
    {
        hitNum = true;
    }
    else
    {
        tempVal *= 10;
        cnt++;
    }
}

var newValue = (decimal)Math.Round(value, cnt);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52440913

复制
相关文章
Linux删除重复行
第一,用sort+uniq,注意,单纯uniq是不行的。 sort -n test.txt | uniq
阳光岛主
2019/02/19
11.7K0
MySQL | 查找删除重复行
本文讲述如何查找数据库里重复的行。这是初学者十分普遍遇到的问题。方法也很简单。这个问题还可以有其他演变,例如,如何查找“两字段重复的行”(#mysql IRC 频道问到的问题)
逍遥子大表哥
2021/12/17
5.8K0
MySQL | 查找删除重复行
如何删除相邻连续的重复行?
根据题意的要求,把要求的结果在原表上用黄色标出,通过观察发现连续登录的某一个页面只保留第一次访问的记录。解题思路是要通过查询,利用信息差过滤掉同一个页面第一次登录后的连续访问记录。
猴子数据分析
2022/07/13
4.6K0
如何删除相邻连续的重复行?
Linux 删除文本中的重复行
这里我做了个简单的测试,当file中的重复行不再一起的时候,uniq将服务删除所有的重复行。经过排序后,所有相同的行都在相邻,因此unqi可以正常删除重复行。
阳光岛主
2019/02/19
8.6K0
MySQL 如何查找删除重复行?
第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对sql做些修改。本文要用到的数据样本:
Bug开发工程师
2020/03/12
6.6K0
MySQL 如何查找删除重复行?
MySQL 如何查找删除重复行?
第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对sql做些修改。本文要用到的数据样本:
芋道源码
2019/10/22
5.6K0
Linux实用技巧——删除重复行
0. 前言 对于删除文件中的重复行,比如处理如下文件 [root@mobius ~]$cat file_test.txt aaa bbbbb ccccc 123 aaaaa 123 bbb aaa 需要得到的删除为: 123 aaa aaaaa bbb bbbbb ccccc 下面给出四种方法 1. sort -u方法 有关 sort 命令操作见Linux 工作常用命令笔记-sort排序 解决方案如下: [root@mobius ~]$sort -u file_test.txt 123 aaa aaaaa
莫斯
2020/09/10
2.8K0
VBA:根据指定列删除重复行
文章背景:在工作生活中,有时需要进行删除重复行的操作。比如样品测试时,难免存在复测数据,一般需要删除第一行数据,保留后一行的数据。
Exploring
2022/09/20
3.2K0
VBA:基于指定列删除重复行
文章背景:在工作生活中,有时需要进行删除重复行的操作。比如样品测试时,难免存在复测数据,一般需要保留最后测试的数据。之前通过拷贝行的方式保留最后一行的数据(参见文末的延伸阅读1),但运行效率较低。目前通过借助数组和字典达到删除重复行的效果。
Exploring
2022/12/18
3.4K0
VBA:基于指定列删除重复行
必备神技能 | MySQL 查找删除重复行
来源:码农有道 ID:b497155298 本文讲述如何查找数据库里重复的行。这是初学者十分普遍遇到的问题。方法也很简单。这个问题还可以有其他演变,例如,如何查找“两字段重复的行”(#mysql IRC 频道问到的问题) 如何查找重复行 第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对sql做些修改。本文要用到的数据样本: create table test(id int not null primary key, da
小小科
2018/05/04
4.2K0
必备神技能 | MySQL 查找删除重复行
必备神技能 | MySQL 查找删除重复行
本文讲述如何查找数据库里重复的行。这是初学者十分普遍遇到的问题。方法也很简单。这个问题还可以有其他演变,例如,如何查找“两字段重复的行”(#mysql IRC 频道问到的问题)
马哥linux运维
2018/11/22
2.8K0
必备神技能 | MySQL 查找删除重复行
spark按某几列删除dataframe重复行
想根据 id 和 lable 来删除重复行,即删掉 id=2 且 lable=2 的重复行。利用 distinct 无法删除
机器学习和大数据挖掘
2019/07/02
2.3K0
如何用 awk 删除文件中的重复行【Programming】
了解如何在不排序或更改其顺序的情况下使用awk'!visited $ 0 ++'。
Potato
2019/11/09
8.7K0
如何用 awk 删除文件中的重复行【Programming】
删除重复值,不只Excel,Python pandas更行
在Excel中,我们可以通过单击功能区“数据”选项卡上的“删除重复项”按钮“轻松”删除表中的重复项。确实很容易!然而,当数据集太大,或者电子表格中有公式时,这项操作有时会变得很慢。因此,我们将探讨如何使用Python从数据表中删除重复项,它超级简单、快速、灵活。
fanjy
2022/04/13
6.1K0
删除重复值,不只Excel,Python pandas更行
Word VBA技术:删除表格中内容相同的重复行
上面的代码区分大小写,即第一列中内容相同但大小写不同不会被删除。下面的代码操作时不区分大小写:
fanjy
2023/02/24
4.5K0
使用VBA删除工作表多列中的重复行
自Excel 2010发布以来,已经具备删除工作表中重复行的功能,如下图1所示,即功能区“数据”选项卡“数据工具——删除重复值”。
fanjy
2022/11/16
11.4K0
使用VBA删除工作表多列中的重复行
删除重复字符
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
1.7K0
Word VBA技术:删除表格中内容相同的重复行(加强版)
在《Word VBA技术:删除表格中内容相同的重复行》中,我们演示了如何使用代码删除已排序表中第1列内容相同的行。然而,如果表格中第1列没有排序,那么如何删除这列中内容相同的行呢?
fanjy
2023/02/24
2.6K0
python删除行_python 删除文件中指定行
代码适用情况:xml文件,循环出现某几行,根据这几行中的某个字段删掉这几行这段代码的作用删除jenkins中config.xml中在自动生成pipline报错的时的回滚 start = ‘
全栈程序员站长
2022/09/02
3.8K0
点击加载更多

相似问题

查找相互重复的行

26

Jquery元素相互跟随。

24

删除跟随给定模式的行

12

选择相互跟随者

20

VBA删除相互抵消的行

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档